Does google accept POST? Anyways, if you dont need to post files, you can use urlencode itself. def encode_formdata(fields): body = urllib.urlencode(dict(<fields>)) content_type = "application/x-www-form-urlencoded" return content_type, body
If you need to post files too, then you will have to use multipart data def encode_multipart_formdata(fields, files): """ fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return (content_type, body) ready for httplib.HTTP instance """ BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) L.append('Content-Type: %s' % mimetypes.guess_type(filename) [0] or 'application/octet-stream' L.append('') L.append(value) L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary=%s' % BOUNDARY return content_type, body Since POST files doesnt work with urllib, you might have to use httplib - or go for very high level tools like twisted. I here show an example with httplib. def post(host, selector, fields, files): if files: content_type, body = encode_multipart_formdata(fields, files) else: content_type, body = encode_formdata(fields) h = httplib.HTTPConnection(host) #Spoof Mozilla headers = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4', 'Content-Type': content_type } h.request('POST', selector, body, headers) res = h.getresponse() return res.status, res.reason, res.read() Please note that you can use multipart whether or not files are there, but parsing multipart usually is slower. Hope this helps. lilanidha...@gmail.com wrote: > Hi, > > I need one complete example of how to do a http post to any site. > I have tried making a POST to google but all I am returned with is a > 405 error. > I don't want to use Pygoogle as I want to try and do this with other > sites. > I am also having problems inputing with the param > I have tried Mechanize. There are no problems with getting data only > posting. > > >>> headers = {'Content-Type': 'text/html; charset=ISO-8859-1', > ... 'User-Agent':'Mozilla/4.0', > ... 'Content-Length':'7'} > >>> conn = httplib.HTTPConnection("www.google.com") > >>> conn.request("POST","/search",params,headers) > >>> r2 = conn.getresponse() > >>> print r2.status, r2.reason > 405 Method Not Allowed > > Regards, > Dhaval -- http://mail.python.org/mailman/listinfo/python-list