2012-11-01 14 views
9

निम्नलिखित कोड मुझे एक त्रुटि प्राप्त का उपयोग करना:पायथन त्रुटि: त्रुटि त्रुटि: पोस्ट डेटा बाइट होना चाहिए; भी उपयोगकर्ता-एजेंट मुद्दा

TypeError: POST data should be bytes or an iterable of bytes. It cannot be str 

दूसरा चिंता, मुझे यकीन है कि अगर मैं अपने उपयोगकर्ता-एजेंट सही ढंग से निर्दिष्ट नहीं हूँ, यहाँ पूरे में मेरे उपयोगकर्ता-एजेंट है: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4। मैंने अपना सर्वश्रेष्ठ शॉट दिया क्योंकि मैंने स्क्रिप्ट में उपयोगकर्ता-एजेंट को परिभाषित किया था।

import urllib.parse 
import urllib.request 

url = 'http://getliberty.org/contact-us/' 
user_agent = 'Mozilla/5.0 (compatible; Chrome/22.0.1229.94; Windows NT)' 
values = {'Your Name' : 'Horatio', 
      'Your Email' : '[email protected]com', 
      'Subject' : 'Hello', 
      'Your Message' : 'Cheers'} 

headers = {'User-Agent': user_agent } 

data = urllib.parse.urlencode(values) 
req = urllib.request.Request(url, data) 
response = urllib.request.urlopen(req) 
the_page = response.read() 

मैं इस समान प्रश्न, TypeError: POST data should be bytes or an iterable of bytes. It cannot be str के बारे में पता कर रहा हूँ, लेकिन बहुत नया हूँ जवाब ज्यादा मदद होने के लिए।

उत्तर

17
data = urllib.parse.urlencode(values) 
type(data) #this returns <class 'str'>. it's a string 

urllib डॉक्स urllib.request.Request(url, data ...) के लिए कहते हैं:

The urllib.parse.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format. It should be encoded to bytes before being used as the data parameter. etc etc

(जोर मेरा)

तो तुम एक स्ट्रिंग है कि सही दिखता है, क्या आप की जरूरत है कि स्ट्रिंग बाइट्स में इनकोडिंग है। और आप एन्कोडिंग चुनते हैं।

binary_data = data.encode(encoding) 
ऊपर लाइन में

: इनकोडिंग 'utf-8' या 'ascii' या अन्य चीजों के एक झुंड हो सकता है। जो भी सर्वर उम्मीद करता है उसे चुनें।

data = urllib.parse.urlencode(values) 
binary_data = data.encode(encoding) 
req = urllib.request.Request(url, binary_data) 
2

आप कोई वैकल्पिक समाधान

import json 
import requests 

url = 'http://getliberty.org/contact-us/' 
user_agent = 'Mozilla/5.0 (compatible; Chrome/22.0.1229.94; Windows NT)' 
values = { 
     'Your Name' : 'Horatio', 
     'Your Email' : '[email protected]', 
     'Subject' : 'Hello', 
     'Your Message' : 'Cheers' 
     } 

headers = {'User-Agent': user_agent, 'Content-Type':'application/json' } 

data = json.dumps(values) 
request = requests.post(url, data=data, headers=headers) 

response = request.json() 
के रूप में अनुरोध मॉड्यूल के साथ की कोशिश कर सकते हैं:

तो तुम कुछ की तरह लग रहा है कि अंत

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