2017-05-22 4 views
0

対私はサービスにカールポスト要求をしています:カールが要求パイソン3

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> 
... 

有線の事は、私のpython +リクエストでそれを行う場合は、上記のカールがないとして、それは私に期待される結果が得られていないということです、私もカールと同じにユーザーエージェントを設定しようとしました:

import requests as r 

headers_p = { 
    'User-Agent': 'curl/7.47.0', 
    'Host': 'www.ctt.pt' 
} 

payload = {'cp4': 2765, 'cp3': 350, 'method':'', 'searchPC2': 'Procurar'} 
req_p = r.post('https://www.ctt.pt/feapl_2/app/open/postalCodeSearch/postalCodeSearch.jspx', data=payload) 
print(req_p.text) # doesn't have the the same content as the curl, I need the html block above 

しかし、それはサーバーが私に結果htmlブロックを送信しないでください

+0

'headers = {'Content-Type': 'application/xml'}'このスニペットを 'r.post'の一部として' headers = headers'として渡します。あなたが出力を得ているかどうかを見てください。 – Haranadh

+0

ありがとう@ハラナード。ノップ、うまくいきませんでした。 curlは動作するもので、リクエストヘッダに 'Content-Type:application/x-www-form-urlencoded'を送信します。 –

+0

レスポンスオブジェクトを印刷してデータを見ることができます。私は 'python3'でも実行できます。私はいくつかのデータを見ることができます。しかし、結果の一部として特定のhtmlコンテンツを見ることはできません。私のpythonバージョンは 'Python 3.4.3'で、venvにインストールされています。 – Haranadh

答えて

0

私は出力を得ています。

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 

必要に応じて内容を解析してください。私は出力を得ています。 headers = {'Content-Type': 'application/x-www-form-urlencoded'}まだ出力を取得しています。

注:私は、サーバーがJSON形式を探しているとして、以下のコードを使用してくださいpython2.7

+0

ありがとうと、同じ応答のボディが欲しい。問題は残っていますが、私はそれを得ています。それは期待したものを上回っているとは違って、私が望むhtmlを与えないだけです。なぜそれを動作させるのか、そしてそれをカール要求はありません。 –

0

を使用しています。

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 
2

あなたの環境でプロキシが設定されている場合は、セッション/リクエストでもプロキシを定義します。セッションで例えば

:別のオプションを追加し、あなたはSSLに問題が使用する場合には、セキュリティ可能
要求
セッションhttp://docs.python-requests.org/en/master/user/advanced/

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) 

は、マニュアルを参照してくださいverify = False 例:

response = requests.get('http://my.domain.com', verify=False) 
関連する問題