http GET使用代理 - Curl命令有效,但python“requests”库没有

时间:2017-04-19 14:51:05

标签: 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}

我正在尝试使用请求库将其转换为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命令,但我对调试网络的东西很新,我想知道它为什么不工作因此决定在这里问。

谢谢!

1 个答案:

答案 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)