2012-05-26 17 views
26

結果を抽出するためのパラメータを持つPOSTを送信するPythonスクリプトを作成しようとしています。 Whith fiddler私は、私が欲しいと返す投稿要求を抽出しました。ウェブサイトはhttpsのみを使用します。Python send header with

POST /Services/GetFromDataBaseVersionned HTTP/1.1 
Host: www.mywbsite.fr 
"Connection": "keep-alive", 
"Content-Length": 129, 
"Origin": "https://www.mywbsite.fr", 
"X-Requested-With": "XMLHttpRequest", 
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
"Content-Type": "application/json", 
"Accept": "*/*", 
"Referer": "https://www.mywbsite.fr/data/mult.aspx", 
"Accept-Encoding": "gzip,deflate,sdch", 
"Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
"Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=; GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 

{"isLeftColumn":false,"lID":-1,"userIpCountryCode":"FR","version":null,"languageCode":"fr","siteCode":"frfr","Quotation":"eu"} 

そして今、私のPythonスクリプト:

#!/usr/bin/env python 
# -*- coding: iso-8859-1 -*- 
import string 
import httplib 
import urllib2 

host = "www.mywbsite.fr/sport/multiplex.aspx" 
    params='"isLeftColumn":"false","liveID":"-1","userIpCountryCode":"FR","version":"null","languageCode":"fr","siteCode":"frfr","Quotation":"eu"' 

headers = { Host: www.mywbsite.fr, 
"Connection": "keep-alive", 
"Content-Length": 129, 
"Origin": "https://www.mywbsite.fr", 
"X-Requested-With": "XMLHttpRequest", 
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
"Content-Type": "application/json", 
"Accept": "*/*", 
"Referer": "https://www.mywbsite.fr/data/mult.aspx", 
"Accept-Encoding": "gzip,deflate,sdch", 
"Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
"Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=;  GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 

} 

url = "/Services/GetFromDataBaseVersionned" 

# POST the request 
conn = httplib.HTTPConnection(host,port=443) 
conn.request("POST",url,params,headers) 
response = conn.getresponse() 

data = response.read() 
print data 

しかし、私は私のスクリプトを実行したとき、私はこのエラーがあります:リクエストモジュールのあなたのリンクのための

socket.gaierror: [Errno -2] Name or service not known 
+6

HTTPを手動で話す良い理由はありません。 urllibまたはそれ以上のものを使用してください、[**要求**](http://docs.python-requests.org/)。 – ThiefMaster

答えて

37

おかげでたくさん。それはちょうど完璧です。私の問題の解決策の下に。

import requests 
import json 

url = 'https://www.mywbsite.fr/Services/GetFromDataBaseVersionned' 
payload = { 
    "Host": "www.mywbsite.fr", 
    "Connection": "keep-alive", 
    "Content-Length": 129, 
    "Origin": "https://www.mywbsite.fr", 
    "X-Requested-With": "XMLHttpRequest", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
    "Content-Type": "application/json", 
    "Accept": "*/*", 
    "Referer": "https://www.mywbsite.fr/data/mult.aspx", 
    "Accept-Encoding": "gzip,deflate,sdch", 
    "Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
    "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
    "Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=; GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 
} 
# Adding empty header as parameters are being sent in payload 
headers = {} 
r = requests.post(url, data=json.dumps(payload), headers=headers) 
print(r.content) 
+4

コードにヘッダーを定義しない – gies0r

+0

ヘッダーを要求のデータとして送信する理由とその理由を説明します。 –

+0

@Mattあなたは主です!! – Max