以下のcurlにこのHTTPS呼び出しがあります。
header1="projectName: zhikovapp"
header2="Authorization: Bearer HZCdsf="
bl_url="https://BlazerNpymh.com/api/documents?pdfDate=$today"
curl -s -k -H "$header1" -H "$header2" "$bl_url"
リクエストモジュールを使用して同等のpython呼び出しを記述します。
header ={
"projectName": "zhikovapp",
"Authorization": "Bearer HZCdsf="
}
response = requests.get(bl_url, headers = header)
ただし、リクエストは無効でした。なにが問題ですか?
返される応答の内容は次のとおりです。
<Response [400]>
_content = '{"Message":"The request is invalid."}'
headers = {'Content-Length': '37', 'Access-Control-Allow-Headers': 'projectname, authorization, Content-Type', 'Expires': '-1', 'cacheControlHeader': 'max-age=604800', 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'Cache-Control': 'no-cache', 'Date': 'Sat, 15 Oct 2016 02:41:13 GMT', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', 'Content-Type': 'application/json; charset=utf-8'}
reason = 'Bad Request'
私はpython 2.7を使用しています
編集:ソビエトが指摘した後、私はいくつかのシンテックスエラーを修正しました。
request.get()
では、 headers
引数は、キーと値のペアのセットである辞書として定義する必要があります。代わりに、文字列のセット(一意のリスト)を定義しました。
ヘッダーは次のように宣言する必要があります。
headers = {
"projectName": "zhikovapp",
"Authorization": "Bearer HZCdsf="
}
response = requests.get(bl_url, headers=headers)
"key": "value"
辞書内の各行のフォーマット。
編集:あなたのAccess-Control-Allow-Headers
小文字のprojectname
およびauthorization
を受け入れると言います。ヘッダーにprojectName
およびAuthorization
という名前を付け、大文字を含めました。一致しない場合は拒否されます。
$today
シェルで定義し、curl
を呼び出し、requests
'を呼び出すURLに置き換えない場合、それが400不正なリクエスト。Access-Control-*
および他のCORSヘッダーは、非ブラウザークライアントとは何の関係もありません。また、HTTPヘッダーは通常、大文字と小文字を区別しません。@furasのアドバイスに従って、出力を以下に示します。
$ curl -H "projectName: zhikovapp" -H "Authorization: Bearer HZCdsf=" \
http://httpbin.org/get
{
"args": {},
"headers": {
"Accept": "*/*",
"Authorization": "Bearer HZCdsf=",
"Host": "httpbin.org",
"Projectname": "zhikovapp",
"User-Agent": "curl/7.35.0"
},
"Origin": "1.2.3.4",
"url": "http://httpbin.org/get"
}
requests
を使用した同じリクエスト:
import requests
res = requests.get('http://httpbin.org/get', headers={
"projectName" : "zhikovapp",
"Authorization" : "Bearer HZCdsf="
})
print(res.json())
{
'args': {},
'headers': {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, compress',
'Authorization': 'Bearer HZCdsf=',
'Host': 'httpbin.org',
'Projectname': 'zhikovapp',
'User-Agent': 'python-requests/2.2.1 CPython/3.4.3 '
'Linux/3.16.0-38-generic'
},
'Origin': '1.2.3.4',
'url': 'http://httpbin.org/get'
}
ご覧のとおり、唯一の違いはUser-Agentヘッダーです。原因はほとんどありませんが、headers
で簡単に設定できます。