2012-05-26 42 views
26

Tôi cố gắng xây dựng một tập lệnh python gửi POST với các tham số để trích xuất kết quả. Whith fiddler Tôi đã trích xuất yêu cầu đăng bài trở lại mà tôi muốn. Trang web chỉ sử dụng https.python gửi POST với tiêu đề

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"} 

Và bây giờ kịch bản của tôi trăn:

#!/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 

Nhưng khi tôi chạy kịch bản của tôi, tôi có lỗi này:

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

Không có lý do chính đáng để nói HTTP theo cách thủ công. Sử dụng urllib hoặc thậm chí tốt hơn, [** requests **] (http://docs.python-requests.org/). – ThiefMaster

Trả lời

37

Cảm ơn rất nhiều cho liên kết của bạn cho các module yêu cầu. Nó chỉ là hoàn hảo. Dưới giải pháp tại vấn đề của tôi.

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

Bạn không xác định tiêu đề trong mã của mình – gies0r

+0

Tại sao bạn gửi tiêu đề làm dữ liệu của yêu cầu và tại sao lại hoạt động? –

+0

@Matt bạn là CHÚA !!!! – Max

Các vấn đề liên quan