如何使用python中的mechanize发送带有post请求的原始JSON数据

时间:2018-06-18 17:08:45

标签: python web-scraping mechanize mechanize-python

我正在尝试使用python脚本将JSON数据发布到api。我正在使用python 2和 mechanize 包。

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

但我无法成功发送JSON数据。但是当我使用urllib.urlencode()发送数据时,数据正在发送但未在服务器中处理,因为服务器期望通过post请求获得JSON数据。请有人帮忙解决这个问题。

1 个答案:

答案 0 :(得分:0)

好的,所以决定按照@Manhattan的建议使用请求模块。使用请求发送带有JSON数据的发布请求更加容易和简单。

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

这里json参数只是一个python字典。标头也是字典。 Official documentation