Python 向 Postman 请求代码片段

Posted

技术标签:

【中文标题】Python 向 Postman 请求代码片段【英文标题】:Python requests code snippet from Postman 【发布时间】:2017-03-22 04:53:09 【问题描述】:

我正在尝试检查网站中是否已存在电子邮件。目前使用 Postman 的示例 Python 代码。

有效的示例代码:

import requests

url = "https://registration.mercadolivre.com.br/registration/"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signUp.email\"\r\n\r\ntest@hotmail.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signUp.repEmail\"\r\n\r\ntest@hotmail.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signUp.newsletter\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"source\"\r\n\r\nmercadolibre\r\n-----011000010111000001101001--"
headers = 
'content-type': "multipart/form-data; boundary=---011000010111000001101001",
'cache-control': "no-cache",
'postman-token': "179cabe2-dd22-490e-8fbd-15bf2977feb5"


response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

我不确定 Postman 为什么要在该字符串中编码有效负载。当我尝试传递字典时,它不再起作用了

不起作用的代码:

import requests

url = "https://registration.mercadolivre.com.br/registration/"

payload =  'signUp.email': 'test@hotmail.com',
 'signUp.repEmail': 'test@hotmail.com',
 'signUp.newsletter': 'true',
 'source': 'mercadolibre' 
headers = 
'content-type': "multipart/form-data; boundary=---011000010111000001101001",
'cache-control': "no-cache",
'postman-token': "22a12fa5-5f68-685c-124d-db0ef6eb334c"


response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

我想知道为什么我不能传递 json 或字典。

【问题讨论】:

【参考方案1】:

您的 json 版本运行良好

import requests

url = "https://registration.mercadolivre.com.br/registration/"

payload =  'signUp.email': 'test@hotmail.com',
 'signUp.repEmail': 'test@hotmail.com',
 'signUp.newsletter': 'true',
 'source': 'mercadolibre' 
headers = 
'content-type': "multipart/form-data; boundary=---011000010111000001101001",
'cache-control': "no-cache",
'postman-token': "22a12fa5-5f68-685c-124d-db0ef6eb334c"


response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

输出

> python payload.py
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="es-AR" class="no-js lt-ie10 lt-ie9 lt-ie8 lt-ie7 ie6"> <![endif]--><!--[if IE 7]> <html lang="es-AR" class="no-js lt-ie10 lt-ie9 lt-ie8 ie7"> <![endif]--><!--[if IE 8]> <html lang="es-AR" class="no-js lt-ie10 lt-ie9 ie8"> <![endif]--><!--[if IE 9]> <html lang="es-AR" class="no-js lt-ie10 ie9"> <![endif]--><!--[if (gt IE 9)|!(IE)]> <!--> <html lang="es-AR" class="no-js"> <!--<![endif]-->
<head><meta content="text/html; charset=UTF-8"/><title>MercadoLivre - Ocorreu um erro</title><link rel=stylesheet href="/css/null/7.0.5/errorPage.css"/><!--[if lt IE 7 ]><script src="http://www.mercadolibre.com/org-img/pcorner/js/dd_belatedPNG.min.js"></script><script> DD_belatedPNG.fix('img, .ico, .png24fix, .ch-expando-trigger'); //fix any <img> or .ico background-images </script><![endif]--><link rel="shortcut icon" href="//http2.mlstatic.com/ui/navigation/1.5.9/mercadolibre/favicon.ico"/></head><body data-country=AR><div class=errorPage500><p class=ups>Ops!</p><div class=errorMessage><h2>Ocorreu um erro</h2><p>Por favor, tente mais tarde.</p></div></div></body></html>
<!--
    Stats
    Generate time       : 36 ms
    Render time         : 1 ms
    Compress time       : 1 ms
    Total time          : 38 ms
    HostName            : i-3647d238-10.17.67.12
-->

我猜问题可能是你的版本我的 python 版本是 3.4.2 请求是 2.11.1

【讨论】:

其实Json版本是不行的,因为输出不一样。它说“MercadoLivre - Ocorreu um erro”。当我使用邮递员建议的方法时,结果与显示电子邮件已在使用中的消息不同。

以上是关于Python 向 Postman 请求代码片段的主要内容,如果未能解决你的问题,请参考以下文章

postman 自动生成 curl 代码片段

postman添加断言

HTTP POST 请求在 Postman 中有效,但在代码中无效

GET 请求在 Postman 中运行良好 - Java 代码中不允许出现 405

postman使用教程9-点 code 按钮生成代码段

尝试通过函数参数将正文发送到 API 时出现 KeyError