2017-02-15 1 views
0

이 포럼에 대한 첫 번째 게시물이며 잘하면 프로그래밍 초보자이기도합니다. 그래서 파이썬에서 내가 요청한 라이브러리에 대한 열정에 대해 첫 번째 프로젝트를하고 싶습니다. 그것은 오! 명령 줄을 통해지도를 다운로드 할 수있는지도 다운로더. 우선, 나는 웹 사이트 (로그인)에 액세스 할 수있는 요청 라이브러리를 배우고 있습니다. 이 지금까지 내 코드입니다 :Python - A Requests library newbie

import requests 
import time 

inUserName = input("Nickname: ") 
inUserPass = input("Password: ") 
req = requests.get("http://osu.ppy.sh/p/api") 

from requests.auth import HTTPBasicAuth 
requests.get("https://osu.ppy.sh/forum/ucp.php?mode=login", auth=HTTPBasicAuth(inUserName, inUserPass)) 

with requests.Session() as session: 
     POSTrequest = session.post(url=req, data={'username': inUserName, 'password': inUserPass}) 

time.sleep(2) 

내가 대단한이로부터 응답 (200),에 geting있어이 ...하지만 난 유사한 코드를 사용했습니다 때 몇 달 전에 내가 아니 었 일부 HTML을 가지고 도움이 될지, 나는 어떤 식 으로든 연결되지 않는다는 것을 알았습니다.

오류 :

코드 개선에 어떤 도움을 주시면 감사하겠습니다
requests.exceptions.MissingSchema: Invalid URL '<Response [200]>': No schema supplied. Perhaps you meant http://<Response [200]>? 

, 덕분에 매우 미안 모든 영어 실수 나하지 첫 번째 언어했습니다.

+1

마지막 줄이 아닌 오류의 전체 추적을 제공 할 수 있습니까? 아니면'print (POSTrequests.txt)'의 출력입니까? 나는 이것이 어디에서 오는 것인지 약간 불분명하다. – roganjosh

+0

이것은 올바르게 보이지 않는다 : req = requests.get ("http://osu.ppy.sh/p/api") . . POSTrequest = session.post (URL = REQ, 데이터 = { '사용자 이름': inUserName, '비밀번호'inUserPass}) 세션으로 requests.Session()와 ' 왜 당신은 GET의 응답을 사용하는 'http : // osu.ppy.sh/p/api'를'post' 요청의 url로 요청 하시겠습니까? 'print (req)'는 무엇을 인쇄합니까? – DeepSpace

+0

'닉네임 : 1 암호 : 1 <응답 [200]> 역 추적 (마지막으로 가장 최근 통화) : 에 파일 "윈도우 경로", 라인 (20), POSTrequest = session.post (URL = REQ, 데이터 = { 'username': inUserName, 'password': inUserPass}) ' – Nathan

답변

1

따라서 게시물 중 하나에 부적절하게 url을 지정했습니다.

쿠키가 서버에서 설정되면 전체 스크립트에 대해 세션을 사용해야합니다. 기능적 API를 사용하여 각 요청에 대해 세션을 만들고 폐기합니다. 이것은 훨씬 더 효율적입니다.

+0

기능적 API의 두 번째 부분을 이해하지 못했지만 고맙습니다. 어떻게하면 더 효율적으로 만들 수 있습니까? – Nathan

+0

@ 네이선 그것은 이미 완료되었습니다. 'session = requests.Session()'이 맨 위에 오면 즉 세션을 한 번 만들고 그 세션을 계속 사용함을 주목하십시오. 그렇지 않으면 세션을 생성하고 파괴하는 데 시간을 낭비하게되고 그 기능의 목적을 상실하게됩니다. – roganjosh

+0

아주 작은 점이지만, 주석의 논의에 따르면'POST_quests.status_code == 200 :'의 경우 실제 이름이 위의 줄에서 'POSTRequest' (단 하나)이기 때문에 실패합니다. – roganjosh