python3的urllib用法_如何使用 python3+urllib 发送一个 application/json 的请求?

使用 postman ,拼装好数据后采用 raw+application/json 的格式,发送 Post 请求能够被服务器正常接收。

通过截包工具 charles 工具,看到发出去的请求是 application/json 格式的数据。

但是采用 python3+urllib ,设置好 http 请求头的 contentType 为 application/json 格式以后,将参数通过 json.dumps 转换为 str 再 encode 成 bytes ,然后通过 openner 对象访问一个连接后,通过截包工具 charles 发现发出去的请求实际上是 application/x-www-form-urlencoded 的格式,请求虽然能成功但是服务器无法解析。

不太清楚这里内部处理是怎么一回事,不过尝试了很多方法, urllib 的包里我也没有看到能够直接把 dict 格式的数据作为参数的 api 。 postdata 都需要 bytes 格式的数据才行。

我的代码大概如下:

head = {

'Accept': '*/*',

'Host': 'www.lvtufang.com',

'Connection': 'keep-alive',

'Content-Length': '245',

'Origin': 'http://www.lvtufang.com',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'

'/51.0.2704.103 Safari/537.36',

'Content-Type': 'application/json',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Referer': 'http://www.lvtufang.com/Account/Login?ReturnUrl=%2FHotel%2FFind',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Accept-Encoding': 'gzip, deflate'

}

cookie = cookiejar.CookieJar()

handler = urllib.request.HTTPCookieProcessor(cookie)

opener = urllib.request.build_opener(handler)

opener.addheader(head)

# 其他为了获取 cookie 的各种请求。

.....

.....

.....

parsed_request_data = json.dumps(self.hotel_search_request_data).encode()

response = openner.open(self.hotel_search_url, parsed_request_data)

不知道是否有经验的同学能不能帮一下忙。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值