2012-11-19 3 views
9

urllib2 오프너가 있는데, 데이터가있는 POST 요청에 사용하고 싶습니다.Python - urllib2 오프너로 게시하기

내가 게시 할 페이지의 내용과 반환되는 페이지의 URL을 얻으려고합니다. (이 코드는 30x 코드로 생각할 수 있습니다. . 코드와이의

생각한다

anOpener = urllib2.build_opener(???,???) 
anOpener.addheaders = [(???,???),(???,???),...,(???,???)] 
# do some other stuff with the opener 
data = urllib.urlencode(dictionaryWithPostValues) 
pageContent = anOpener.THE_ANSWER_TO_THIS_QUESTION 
pageURL = anOpener.THE_SECOND_PART_OF_THIS_QUESTION 

답변

6

일단 대답을 얻으면 이것은 바보 같은 질문입니다. 첫 번째 부분에 대한

open(URL,data) 

, 레이첼 샌더스처럼 두 번째의 경우,

geturl() 

언급 :

그냥 사용합니다.

전체 Request/opener가 어떻게 작동하는지 실제로 알 수는 없습니다. 멋진 문서를 찾을 수 없습니다 :/

5

이 페이지는 당신을 도움이 될 것입니다은 :

http://www.voidspace.org.uk/python/articles/urllib2.shtml#data

import urllib 
import urllib2 

url = 'http://www.someserver.com/cgi-bin/register.cgi' 
values = {'name' : 'Michael Foord', 
     'location' : 'Northampton', 
     'language' : 'Python' } 

data = urllib.urlencode(values) 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
the_page = response.read() 
the_url = response.geturl() # <- doc claims this gets the redirected url 

그것은 당신이 또한에 response.info()를 사용할 수처럼 보인다 .geturl()을 사용하는 대신 Location 헤더를 직접 가져옵니다.

희망 하시겠습니까?

+0

나는 이미 구축 된 urllib2 개막기를 사용하여 답변을 요청했습니다. 나는 대답을 얻었다. 이 모든 질문은 매우 어리석은 롤이었습니다. – Shariq

+1

http://docs.python-requests.org/en/latest/ 및 http://pypi.python.org/pypi/requests/0.14.2에서 살펴볼 수 있습니다. 웹 서버와의 상호 작용 작업을 단순화하는 urllib의 타사 대체품입니다. 비동기 래퍼는 @ http://pypi.python.org/pypi/grequests에서 사용할 수 있습니다. 그것을 발견 한 이후, 나는 urllib을 사용하여 또 다른 코드를 작성하지 않았다. – synthesizerpatel

0

요청에 데이터를 추가하면 메소드가 자동으로 POST로 변경됩니다. 다음 예제를 확인하십시오 :

import urllib2 
import json 

url = "http://server.local/x/y" 
data = {"name":"JackBauer"} 
method = "PUT" 
request = urllib2.Request(url) 
request.add_header("Content-Type", "application/json") 
request.get_method = lambda: method 
if data: request.add_data(json.dumps(data)) 
response = urllib2.urlopen(request) 
if response: print response.read() 

내가 언급했듯이 GET/POST를 사용할 경우 람다는 필요하지 않습니다.