Python request.post работает, но httr POST не работает - PullRequest
0 голосов
/ 11 июля 2020

Я пытался получить доступ к amazon PAAPI как из R, так и из Python.

Я добился успеха со стороны python, используя request.post, но точный код с тем же телом и заголовками не работает, пока я пытаюсь использовать httr:POST.

Python код

print('\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++')
print('Request URL = ' + endpoint)

r = requests.post(endpoint, data=request_parameters, headers=headers)

print('\nRESPONSE++++++++++++++++++++++++++++++++++++')
print('Response code: %d\n' % r.status_code)
#print('Response code: '+r.status_code)
print('\nRequest Header')
print(r.request.headers)
print('\nRequest Body')
print(r.request.body)
print('\nResponse Header')
print(r.headers)

Python вывод

BEGIN REQUEST++++++++++++++++++++++++++++++++++++
Request URL = https://webservices.amazon.com/paapi5/searchitems

RESPONSE++++++++++++++++++++++++++++++++++++
Response code: 200


Request Header
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-encoding': 'amz-1.0', 'host': 'webservices.amazon.com', 'Content-Type': 'application/json; charset=utf-8', 'X-Amz-Date': '20200711T163122Z', 'X-Amz-Target': 'com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems', 'Authorization': 'AWS4-HMAC-SHA256 Credential=AKIAJCYUALL4B3W64R7Q/20200711/us-east-1/ProductAdvertisingAPI/aws4_request, SignedHeaders=content-encoding;content-type;host;x-amz-date;x-amz-target, Signature=f8d3e2f11f977b96b8cefd32190f9179e21ec2c12e36996cf6bd7260b8f75fdb', 'Content-Length': '178'}

Request Body
{"PartnerType":"Associates","PartnerTag":"paapi_test_sof-20","Keywords":"Harry","SearchIndex":"All","Resources":["Images.Primary.Small","ItemInfo.Title","Offers.Listings.Price"]}

Response Header
{'Server': 'Server', 'Date': 'Sat, 11 Jul 2020 16:31:24 GMT', 'Content-Type': 'application/json', 'Content-Length': '6405', 'Connection': 'keep-alive', 'x-amzn-RequestId': '3136f498-4272-4a25-b1a2-9dc19b444c4a', 'Vary': 'Content-Type,Accept-Encoding,X-Amzn-CDN-Cache,X-Amzn-AX-Treatment,User-Agent', 'x-amz-rid': 'RNS7C3X3JST2M26BPNPQ'}

код R

r = POST(endpoint, body=request_parameters, add_headers("content-encoding" = "amz-1.0","Host"=host,"Content-Type"= "application/json; charset=UTF-8",
                                   "X-Amz-Date"=amz_date,
                                   "X-Amz-Target"=amz_target,
                                   "Authorization"=authorization_header),verbose())

httr:verbos() вывод

-> POST /paapi5/searchitems HTTP/1.1
-> Host: webservices.amazon.com
-> User-Agent: libcurl/7.64.1 r-curl/4.2 httr/1.4.1
-> Accept-Encoding: deflate, gzip
-> Accept: application/json, text/xml, application/xml, */*
-> content-encoding: amz-1.0
-> Content-Type: application/json; charset=UTF-8
-> X-Amz-Date: 20200711T163122Z
-> X-Amz-Target: com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems
-> Authorization: AWS4-HMAC-SHA256 Credential=AKIAJCYUALL4B3W64R7Q/20200711/us-east-1/ProductAdvertisingAPI/aws4_request, SignedHeaders=content-encoding;content-type;host;x-amz-date;x-amz-target, Signature=f8d3e2f11f977b96b8cefd32190f9179e21ec2c12e36996cf6bd7260b8f75fdb
-> Content-Length: 178
-> 
>> {"PartnerType":"Associates","PartnerTag":"paapi_test_sof-20","Keywords":"Harry","SearchIndex":"All","Resources":["Images.Primary.Small","ItemInfo.Title","Offers.Listings.Price"]}

<- HTTP/1.1 401 Unauthorized
<- Server: Server
<- Date: Sat, 11 Jul 2020 16:34:46 GMT
<- Content-Type: application/json
<- Content-Length: 321
<- Connection: keep-alive
<- x-amzn-RequestId: 5b4e24f5-c0ce-413e-b682-3414775cbfc2
<- Vary: Content-Type,Accept-Encoding,X-Amzn-CDN-Cache,X-Amzn-AX-Treatment,User-Agent
<- x-amz-rid: KRQY1HBRPPHG3A0VEBF3

Я вижу только разницу между пользовательскими агентами между запросами. Я не думаю, что это имеет значение.

Оцените это, если кто-нибудь сможет заметить разницу или причину сбоя в R.

Примечание: подпись действительна только в течение 15 минут с момента обозначается X-Amz-Date в заголовке.

...