2

我有一个实现如下:

  1. 有一个付款表格,用户填写所有详细信息。(API1),这里我收到错误 302:

    在此处输入图像描述

  2. 在提交该表单时,会调用我认为的功能之一。

  3. 在后端实现中,即。在views.py,我想向我集成的网关之一发送一个 POST 请求。(API2

    在此处输入图像描述

但是问题来了,因为请求是以 GET 方式进行的,因此它正在丢弃我与请求一起发送的所有表单数据。

以下是代码。

视图.py -->

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
}
payload = {
    'CustomerID': 'abc',
    'TxnAmount': '1.00',
    'BankID': '1',
    'AdditionalInfo1': '999999999',
    'AdditionalInfo2': 'test@test.test',
}


payload_encoded = urlencode(payload, quote_via=quote_plus)

response = requests.post('https://www.billdesk.com/pgidsk/PGIMerchantRequestHandler?hidRequestId=****&hidOperation=****', data=payload_encoded, headers=headers)

content = response.url
return_config = {
    "type": "content",
    "content": redirect(content)
}
return return_config

如何将第二个请求(API2)作为 POST 请求连同所有参数一起发送?我在这里做错了什么?

谢谢你的建议。

4

2 回答 2

2

如果请求返回 302 状态,则新的 url 在response.headers['Location']. 您可以继续关注新的网址,直到您得到有效的回复。

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
}
payload = {
    'CustomerID': 'abc',
    'TxnAmount': '1.00',
    'BankID': '1',
    'AdditionalInfo1': '999999999',
    'AdditionalInfo2': 'test@test.test',
}


payload_encoded = urlencode(payload, quote_via=quote_plus)

response = requests.post('https://www.billdesk.com/pgidsk/PGIMerchantRequestHandler?hidRequestId=****&hidOperation=****', data=payload_encoded, headers=headers)

while response.status_code == 302:
    response = requests.post(response.headers['Location'], data=payload_encoded, headers=headers)

content = response.text
return_config = {
    "type": "content",
    "content": content
}
return return_config
于 2020-07-30T07:28:58.420 回答
0
# here you are assigning the post url to content ie. 'https://www.billdesk.com/pgidsk/PGIMerchantRequestHandler?hidRequestId=****&hidOperation=****'
content = response.url 

return_config = {
    "type": "content",
    "content": redirect(content) # calling redirect with the response.url
}

改成:

# check status code for response
print(response)
 
content = response.json() # if response is of json in format
content = response.text   # if response is of plain text

return_config = {
    "type": "content",
    "content": content 
}

return return_config

request.post()返回requests.Response对象。为了获取响应数据,您需要使用.text.json()取决于发送响应的格式来访问它。

于 2020-07-29T12:47:57.073 回答