2017-12-12 20 views
0

私はREST API用にPythonスクリプトを作成し、最初に認証し、getまたはputを実行します。通常はcurlを次のように使用します。jsonを使ってREST APi用のpythonスクリプトを作成する

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

は、なぜあなたはカール 'GET'要求(第2のための'のContent-type'がヘッダを設定しています)? GETリクエストにはリクエストボディがないため、コンテンツタイプを設定することは意味がありません。 –

答えて

0

あなたのcurlコマンドがちょうどフォームデータとしてではなく、Authorizationヘッダとしてユーザ名とパスワードをポスト行うことができるようにする必要があります。

requestsと同じ操作を行い、キャプチャを処理するためにsession objectを使用して、クッキーの送信:

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

@JVJ:パスワードは単に文字列であり、 'raw_input()'呼び出しを使わずに辞書に格納します。私はあなたのコードがしたので、それらを入れます。 –

関連する問題