http GET使用proxy-Curl命令工作,但python;“请求”;图书馆没有

http GET使用proxy-Curl命令工作,但python;“请求”;图书馆没有,python,python-2.7,http,curl,python-requests,Python,Python 2.7,Http,Curl,Python Requests,我有以下工作curl命令: curl -x http://<PROXY URL>:3128 -u myUsername 'https://logs.company.net/daily-2017.04.13/_search?pretty' -d '{BIG JSON BLOB} curl-xhttp://:3128-u myUsername'https://logs.company.net/daily-2017.04.13/_search?pretty'-d'{BIG JSON BL

我有以下工作curl命令:

curl -x http://<PROXY URL>:3128 -u myUsername 'https://logs.company.net/daily-2017.04.13/_search?pretty' -d '{BIG JSON BLOB}
curl-xhttp://: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))
json_string=''{BIG json BLOB}''
打印(json_字符串)
loads(json#U字符串)#obj现在包含数据的dict
代理={“http”:“http://:3128”}
r=请求。获取(“https://logs.company.net/daily-2017.04.13/_search?pretty,data=json_字符串,auth=(self.username,self.password),proxies=proxies,verify=False)#
打印(r.状态\ U代码,r.原因)
打印(str(r.content))
据我所知,这基本上与上述内容相同,但当curl命令不起作用时,它会在测试服务器上超时

有人知道这里有什么问题,或者我如何调试它吗?我本可以使用subprocess模块侵入curl命令,但我对调试网络的东西还很陌生,我想知道为什么它不起作用,因此决定在这里提问


谢谢

根据命令的手动页面,
-d
标志用于使用post请求发布数据:

-d/--数据

(HTTP)以POST请求的方式将指定数据发送到HTTP服务器,与用户填写HTML表单并按下submit按钮时浏览器的方式相同。这将导致curl使用内容类型application/x-www-form-urlencoded将数据传递给服务器。与-F/--form进行比较

因此,您需要使用
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)

感谢Laurent,我对此感到有点困惑,因为我在网上看到了仍然使用get()发送数据的示例。不幸的是,更改此选项仍然会导致超时。@onmywaytoddontknow:您的代理服务器或远程服务器是否超时?代理服务器超时。我想知道是否与此有关: