업데이트 : Lee의 의견에 따라 내 코드를 정말 간단한 스크립트로 압축하고 명령 줄에서 실행하기로 결정했습니다.
import urllib2
import sys
username = sys.argv[1]
password = sys.argv[2]
url = sys.argv[3]
print("calling %s with %s:%s\n" % (url, username, password))
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request(url)
f = urllib2.urlopen(req)
data = f.read()
print(data)
불행히도 여전히 Authorization
헤더를 생성하지 않습니다 (Wireshark 당) :(
urllib2를 통해 기본 AUTH를 보내는 데 문제가 있습니다. 이 기사를 살펴보고 예제를 따랐습니다. 내 코드 :
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, "api.foursquare.com", username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request("http://api.foursquare.com/v1/user")
f = urllib2.urlopen(req)
data = f.read()
wireshark를 통해 Wire에서 다음을보고 있습니다.
GET /v1/user HTTP/1.1
Host: api.foursquare.com
Connection: close
Accept-Encoding: gzip
User-Agent: Python-urllib/2.5
curl을 통해 요청을 보낼 때와 비교하여 Authorization이 전송되지 않은 것을 볼 수 있습니다. curl -u user:password http://api.foursquare.com/v1/user
GET /v1/user HTTP/1.1
Authorization: Basic =SNIP=
User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
Host: api.foursquare.com
Accept: */*
어떤 이유로 내 코드가 인증을 보내지 않는 것 같습니다. 누구든지 내가 놓친 것을 볼 수 있습니까?
감사
-사이먼
'WWW-Authenticate'
헤더를 반환하지 않는 것인지 궁금합니다 .try: urllib2.urlopen(req) except urllib2.HTTPError, e: print e.headers
See this SO post answer를 사용하여 확인할 수 있습니다 .