2017-12-12 4 views
0

나는 REST API 용 파이썬 스크립트를 만들고, 먼저 인증을하고 get 또는 put을하고 싶습니다. 일반적으로 다음과 같이 curl을 사용합니다 :REST APi 용 파이썬 스크립트, json을 사용하는 컬 (curl) 작품

curl -i -X POST -d username=admin -d password='pass' -c ./cookies.txt http://ip_address:9080/nbapiemswsweb/login 
curl -v -i -H “Content-Type:application/json” -X GET -b ./cookies.txt 'http://ip_address:9080/nbapiemswsweb/rest/v1/Search/Element' 

내가 인증을 취득하는 것을 시도하고있다,하지만 난 401을 얻고, 다음 GET을 수행하는 방법을 모른다 :

import requests 
from requests.auth import HTTPDigestAuth 
import json 

url = "http://IP_ADDRESS:9080/nbapiemswsweb/login" 

myResponse = requests.post(url,auth=HTTPDigestAuth(raw_input("username: "), raw_input("Password: ")), verify=True) 
print (myResponse.status_code) 

결과를

python restapi.py 
username: admin 
Password: pass 
401 

나는 200를 얻고 두 번째 컬

+0

을 당신은 컬의'내용-Type' 헤더를 설정하는 이유는'GET' 요청 (두 번째 :

쿠키의 전송 requests와 동일한 작업을 수행하고, 캡처를 처리 할 session object를 사용하여)? GET 요청에는 요청 본문이 없으므로 콘텐츠 형식을 설정하는 것은 의미가 없습니다. –

답변

0

귀하의 curl 명령 그냥하지 않는 인증 헤더로 폼 데이터, 같은 사용자 이름과 암호를 게시하는 GET을 할 수 있어야합니다.

with requests.Session() as session: 
    formdata = { 
     'username': raw_input("username: "), 
     'password': raw_input("Password: "), 
    } 
    myResponse = session.post(url, data=formdata, verify=True) 

    second_response = session.get('http://IP_ADDRESS:9080/nbapiemswsweb/rest/v1/Search/Element') 
+0

고마워요, 저 작업, 응답 및 콘텐츠에 대한 인쇄물을 추가합니다. 자격 증명을 묻지 않고 양식없이 사용자와 암호를 추가 할 수있는 방법을 알고 계시 겠지만 자격 증명은 스크립트에 있습니다. – JVJ

+0

@ 사용자 이름 : 사용자 이름 패스워드는 문자열 일 뿐이므로'raw_input()'호출 대신 사전에 저장하십시오. 나는 당신의 코드가했기 때문에 그것들을 넣었다. –