Curl vs.python3

Curl vs.python3,python,python-3.x,curl,request,Python,Python 3.x,Curl,Request,我正在对服务执行curl post请求: curl -v --data "cp4=2765&cp3=350&method%3AsearchPC2=Procurar" https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx 我可以看出它是成功的,因为我们有一个div,其结果在响应正文中: ... <div class="highlighted-result text-left"&g

我正在对服务执行curl post请求:

curl -v --data "cp4=2765&cp3=350&method%3AsearchPC2=Procurar" https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx
我可以看出它是成功的,因为我们有一个div,其结果在响应正文中:

...
<div class="highlighted-result text-left">

    <h4 class="subheader">Rua Sacadura Cabral</h4>


    <h4 class="subheader">Ímpares de 11 a 233</h4>


    <h3 class="subheader">Galiza</h3>


    <h2>2765-350 ESTORIL</h2>

</div>
...

但是它失败了,当我尝试以下操作时,服务器没有向我发送结果html块

,我得到了输出

import requests as r
from requests import Response

headers = {'Content-Type': 'application/xml'}

payload = {'cp4': 2765, 'cp3': 350, 'method':'',  'searchPC2': 'Procurar'}
given_url = 'https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx'
req_p = r.post(given_url, data=payload, headers=headers)

print req_p, req_p.text
尝试根据需要解析内容。我正在得到输出。
我试图更改
标题={'Content-Type':'application/x-www-form-urlencoded'}
但仍然得到一些输出


注意:我正在使用python2.7,当我尝试以下操作时,我得到了输出

import requests as r
from requests import Response

headers = {'Content-Type': 'application/xml'}

payload = {'cp4': 2765, 'cp3': 350, 'method':'',  'searchPC2': 'Procurar'}
given_url = 'https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx'
req_p = r.post(given_url, data=payload, headers=headers)

print req_p, req_p.text
尝试根据需要解析内容。我正在得到输出。
我试图更改
标题={'Content-Type':'application/x-www-form-urlencoded'}
但仍然得到一些输出


注意:我使用的是python2.7,请使用下面的代码,因为服务器正在搜索json格式

import requests as r
import json
from requests import Response
headers = {'Content-Type': 'application/json'}
payload = {'cp4': 2765, 'cp3': 350, 'method':'',  'searchPC2': 'Procurar'}
data_json = json.dump(payload)
given_url = 'https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx'
req_p = r.post(given_url, data=data_json, headers=headers)
print req_p, req_p.text

服务器正在搜索json格式,请使用以下代码

import requests as r
import json
from requests import Response
headers = {'Content-Type': 'application/json'}
payload = {'cp4': 2765, 'cp3': 350, 'method':'',  'searchPC2': 'Procurar'}
data_json = json.dump(payload)
given_url = 'https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx'
req_p = r.post(given_url, data=data_json, headers=headers)
print req_p, req_p.text

如果在您的环境中配置了代理,请在会话/请求中定义它

例如,会话:

    my_proxies = {  
        'http': 'http://myproxy:8080',  
        'https': 'https://myproxy:8080'  
    }

    session = requests.Session()  
    request = requests.Request('POST', 'http://my.domain.com', data=params_template, headers=req_headers, proxies=my_proxies)  
    prepped = session.prepare_request(request)  
    response = session.send(prepped)  
请参阅文档:
请求
会议

另一个选项是安全性,如果您使用的ssl有问题,请添加verify=False 例如:

    response = requests.get('http://my.domain.com', verify=False)

如果在您的环境中配置了代理,请在会话/请求中定义它

例如,会话:

    my_proxies = {  
        'http': 'http://myproxy:8080',  
        'https': 'https://myproxy:8080'  
    }

    session = requests.Session()  
    request = requests.Request('POST', 'http://my.domain.com', data=params_template, headers=req_headers, proxies=my_proxies)  
    prepped = session.prepare_request(request)  
    response = session.send(prepped)  
请参阅文档:
请求
会议

另一个选项是安全性,如果您使用的ssl有问题,请添加verify=False 例如:

    response = requests.get('http://my.domain.com', verify=False)

headers={'Content-Type':'application/xml'}
使用此代码段并将其作为
r.post
的一部分作为
headers=headers
传递。看看你是否得到了输出。谢谢@Haranadh。不,没用。工作的curl在请求标题上发送
内容类型:application/x-www-form-urlencoded
。您可以打印响应对象并查看数据。我也能在
python3
中运行。我可以看到一些数据。但并没有看到特定的html内容作为结果的一部分。我的python版本是
Python3.4.3
,安装在venv中。我知道@KeerthanaPrabhakaran,这个问题有什么不清楚的地方吗?我只是说它与curl请求不同,我想要相同的响应主体,上面发布的块html
headers={'Content-Type':'application/xml'}
使用这个片段,并将其作为
r.post
的一部分作为
headers=headers
传递。看看你是否得到了输出。谢谢@Haranadh。不,没用。工作的curl在请求标题上发送
内容类型:application/x-www-form-urlencoded
。您可以打印响应对象并查看数据。我也能在
python3
中运行。我可以看到一些数据。但并没有看到特定的html内容作为结果的一部分。我的python版本是
Python3.4.3
,安装在venv中。我知道@KeerthanaPrabhakaran,这个问题有什么不清楚的地方吗?我只是说它与curl请求不同,我想要相同的响应主体,上面发布了块html,谢谢。问题仍然存在,我也要把它弄出来,只是它没有给出我想要的html,不像curl那样,它超出了预期,我只需要知道为什么/如何使它工作,以及为什么它可以与curl一起工作,但不能与请求一起工作。谢谢。问题仍然存在,我也要把它拿出来,只是它没有给出我想要的html,不像curl那样,它超出了预期,我只需要知道为什么/如何让它工作,为什么它可以使用curl,但不能使用请求。