简体   繁体   English

如何在python中使用机械化发送带有后期请求的原始JSON数据

[英]How to send raw JSON data with a post request using mechanize in python

I am trying to POST JSON data to a api using a python script. 我正在尝试使用python脚本将JSON数据发布到api。 I'm using python 2 and mechanize package. 我正在使用python 2和机械化包。

import mechanize
import json, logging, sys, urllib

br = mechanize.Browser()
url = 'url_here'
headers = [('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'),
('Content-Type', 'application/json')]
br.set_handle_robots(False)
br.set_debug_responses(True)
br.set_debug_redirects(True)
br.set_debug_http(True)
logger = logging.getLogger("mechanize")
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.INFO)
body = {"audience":{"name":"asd","criteria":[{"category":"common","label":"Industry","tags":[{"tag":"Information Technology","text":"Information Technology","score":2,"type":"Similar"},{"tag":"Computer Software","text":"Computer Software","score":2,"type":"Similar"},{"tag":"Marketing and Advertising","text":"Marketing and Advertising","score":2,"type":"Similar"}],"type":"input-group","icon":"restaurant_menu","operation":"include","suggestions":True,"related":False,"multiple":True,"rankings":True,"showStrictness":True,"strict":False,"stub":{"tags":[],"values":[]},"values":["Information Technology","Computer Software","Marketing and Advertising"],"field":"industry","scope":"companies"},{"category":"common","label":"Contact Location","type":"location-group","icon":"person_pin_circle","operation":"include","multiple":True,"suggestions":True,"related":False,"tip":"Find people based on their location. You can filter by Country, and Region / City (for example, San Francisco Bay Area).","options":[{"value":"country","label":"Country","placeholder":"e.g... United States, Australia"},{"value":"locality","label":"Region / City","placeholder":"e.g... San Francisco, Toronto"}],"stub":{"tags":[],"values":[]},"tags":[],"values":["India","United States of America","United Kingdom"],"field":"country","childField":"country","scope":"contacts"},{"category":"tech","label":"Technology Used","type":"input-group","operation":"include","suggestions":True,"related":False,"icon":"power","multiple":True,"rankings":True,"placeholder":"e.g... Salesforce, jQuery, Ruby","tip":"Find companies based on specific web-based technologies they use. Note: This filter will narrow your search significantly. Any companies that dont use the technology you enter will be excluded from the results. ","stub":{"tags":[],"values":[]},"tags":[{"tag":"jQuery","text":"jQuery","score":2,"type":"Similar"},{"tag":"Angular JS v2","text":"Angular JS v2","score":0,"type":"Similar"}],"values":["jQuery","Angular JS v2"],"field":"technology","scope":"companies"}],"purchasedLeads":0,"estimatedReach":0,"maxLeadsPerCompany":3,"searchLeadCount":500,"emailGuesserScope":"professional"}}
br.addheaders = headers
response = br.open(url, data=json.dumps(body))
print response

But I am unable to send the JSON data successfully. 但是我无法成功发送JSON数据。 But when I'm sending the data using urllib.urlencode() then the data is being sent but not being processed in the server as the server is expecting JSON data through the post request. 但是,当我使用urllib.urlencode()发送数据时,正在发送数据但未在服务器中对其进行处理,因为服务器希望通过发布请求获得JSON数据。 Please someone help with this. 请有人帮忙。

Okay so decided to go with the requests module as suggested by @Manhattan. 好的,因此决定使用@Manhattan建议的请求模块。 It's much easier and simple to send post request with json data using requests. 使用请求发送带有JSON数据的发布请求更加容易和简单。

r = requests.post(url, json={"audienceId":id,"leadCount":500}, headers=h)

Here the json parameter is just a python dictionary. 这里的json参数只是一个python字典。 and headers is also a dictionary. 标头也是字典。 Official documentation 官方文件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM