我有以下工作curl命令:
curl -x http://<PROXY URL>:3128 -u myUsername 'https://logs.company.net/daily-2017.04.13/_search?pretty' -d '{BIG JSON BLOB}
我正在尝试使用请求库将其转换为python。以下是我到目前为止的情况:
json_string = '''{BIG JSON BLOB}'''
print(json_string)
mydict = json.loads(json_string) # obj now contains a dict of the data
proxies = {"http" : "http://<proxy url>:3128"}
r = requests.get("https://logs.company.net/daily-2017.04.13/_search?pretty", data=json_string,auth=(self.username, self.password), proxies=proxies, verify= False) #
print(r.status_code, r.reason)
print(str(r.content))
根据我的理解,这基本上与上面相同,但是当curl命令没有时,它会在我的测试服务器上超时。
有谁知道这里的问题是什么或我如何调试它?我可以使用子进程模块攻击curl命令,但我对调试网络的东西很新,我想知道它为什么不工作因此决定在这里问。
谢谢!
答案 0 :(得分:0)
根据curl命令的手册页,-d
标志用于使用POST请求发布数据:
-d / - data
(HTTP)将指定数据发送到HTTP服务器的 POST 请求,就像用户填写HTML表单并按下提交按钮时浏览器一样。这将导致curl使用content-type application / x-www-form-urlencoded将数据传递到服务器。与-F / - 形式比较。
因此,您需要使用requests.post()
函数而不是requests.get()
。
例如:
r = requests.post("https://logs.company.net/daily-2017.04.13/_search?pretty",
data=json_string,
auth=(self.username, self.password),
proxies=proxies,
verify=False)