in commands/FBPrintCommands.py [0:0]
def run(self, arguments, options):
request = fb.evaluateInputExpression(arguments[0])
HTTPHeaderSring = ""
HTTPMethod = fb.evaluateExpressionValue(
"(id)[{} HTTPMethod]".format(request)
).GetObjectDescription()
URL = fb.evaluateExpressionValue(
"(id)[{} URL]".format(request)
).GetObjectDescription()
timeout = fb.evaluateExpression(
"(NSTimeInterval)[{} timeoutInterval]".format(request)
)
HTTPHeaders = fb.evaluateObjectExpression(
"(id)[{} allHTTPHeaderFields]".format(request)
)
HTTPHeadersCount = fb.evaluateIntegerExpression(
"[{} count]".format(HTTPHeaders)
)
allHTTPKeys = fb.evaluateObjectExpression("[{} allKeys]".format(HTTPHeaders))
for index in range(0, HTTPHeadersCount):
key = fb.evaluateObjectExpression(
"[{} objectAtIndex:{}]".format(allHTTPKeys, index)
)
keyDescription = fb.evaluateExpressionValue(
"(id){}".format(key)
).GetObjectDescription()
value = fb.evaluateExpressionValue(
"(id)[(id){} objectForKey:{}]".format(HTTPHeaders, key)
).GetObjectDescription()
if len(HTTPHeaderSring) > 0:
HTTPHeaderSring += " "
HTTPHeaderSring += '-H "{}: {}"'.format(keyDescription, value)
HTTPData = fb.evaluateObjectExpression("[{} HTTPBody]".format(request))
dataFile = None
dataAsString = None
if fb.evaluateIntegerExpression("[{} length]".format(HTTPData)) > 0:
if options.embed:
if fb.evaluateIntegerExpression(
"[{} respondsToSelector:@selector(base64EncodedStringWithOptions:)]".format(
HTTPData
)
):
dataAsString = fb.evaluateExpressionValue(
"(id)[(id){} base64EncodedStringWithOptions:0]".format(HTTPData)
).GetObjectDescription()
else:
print("This version of OS doesn't supports base64 data encoding")
return False
elif not runtimeHelpers.isIOSDevice():
dataFile = self.generateTmpFilePath()
if not fb.evaluateBooleanExpression(
'(BOOL)[{} writeToFile:@"{}" atomically:NO]'.format(
HTTPData, dataFile
)
):
print("Can't write data to file {}".format(dataFile))
return False
else:
print(
'HTTPBody data for iOS Device is supported only with "--embed-data" flag'
)
return False
commandString = ""
if dataAsString is not None and len(dataAsString) > 0:
dataFile = self.generateTmpFilePath()
commandString += 'echo "{}" | base64 -D -o "{}" && '.format(
dataAsString, dataFile
)
commandString += "curl -X {} --connect-timeout {}".format(HTTPMethod, timeout)
if len(HTTPHeaderSring) > 0:
commandString += " " + HTTPHeaderSring
if dataFile is not None:
commandString += ' --data-binary @"{}"'.format(dataFile)
commandString += ' "{}"'.format(URL)
print(commandString)