2012-09-20 14 views
10

मैं HTML पृष्ठ में पोस्ट अनुरोध भेजने से वापस पाने के लिए कोशिश कर रहा हूँ प्राप्त करने के लिए:अजगर urllib2 का उपयोग कर पोस्ट अनुरोध भेजने के लिए और प्रतिक्रिया

import httplib 
import urllib 
import urllib2 
from BeautifulSoup import BeautifulSoup 


headers = { 
    'Host': 'digitalvita.pitt.edu', 
    'Connection': 'keep-alive', 
    'Content-Length': '325', 
    'Origin': 'https://digitalvita.pitt.edu', 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1', 
    'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'Accept': 'text/javascript, text/html, application/xml, text/xml, */*', 
    'Referer': 'https://digitalvita.pitt.edu/index.php', 
    'Accept-Encoding': 'gzip,deflate,sdch', 
    'Accept-Language': 'en-US,en;q=0.8', 
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
    'Cookie': 'PHPSESSID=lvetilatpgs9okgrntk1nvn595' 
} 

data = { 
    'action': 'search', 
    'xdata': '<search id="1"><context type="all" /><results><ordering>familyName</ordering><pagesize>100000</pagesize><page>1</page></results><terms><name>d</name><school>All</school></terms></search>', 
    'request': 'search' 
} 

data = urllib.urlencode(data) 
print data 
req = urllib2.Request('https://digitalvita.pitt.edu/dispatcher.php', data, headers) 
response = urllib2.urlopen(req) 
the_page = response.read() 

soup=BeautifulSoup(the_page) 
print soup 

किसी को मुझे बताओ कि यह काम करने के लिए कर सकते हैं?

+3

क्या आपने [अनुरोध] (http://docs.python-requests.org/en/latest/index.html) लाइब्रेरी की जांच की है? यह http अनुरोधों को अधिक आसान बनाता है। इसके अलावा आपके कुछ कैरिज रिटर्न गायब हैं, उदा। आपके आयात विवरणों के बीच, और आपके 'प्रिंट' कथन से पहले। क्या ये आपके मूल कोड में भी मौजूद हैं? – Maus

+1

त्रुटि संदेश – Will

+0

का उपयोग करना उपयोगी होगा pycurl का उपयोग करना बहुत आसान और क्लीनर है: http://stackoverflow.com/questions/22799648/convert-curl-example-to-pycurl – johannzhaojohann

उत्तर

7

Content-Length हेडर निर्दिष्ट नहीं करें, urllib2 यह आपके लिए गणना करता है। जैसा कि है, आपका हेडर गलत लंबाई निर्दिष्ट करता है:

>>> data = urllib.urlencode(data) 
>>> len(data) 
319 

उस शीर्षलेख के बिना बाकी पोस्ट कोड मेरे लिए ठीक काम करता है।

संबंधित मुद्दे