Python基础学习17

网络库urllib模块使用

from urllib import request

url ='http://www.baidu.com'
response = request.urlopen(url,timeout=1)
print (response.read().decode('utf-8'))

如上事例代码去掉decode('utf-8')时会出现乱码,主要原因是如果用read直接去读时1个汉字只占1个字节,所以出现乱码。
gbk编码一个汉字占2个字节,包括一些常用汉字。
utf-8编码一个汉字占3个字节,生僻汉字都包括。

请求网页方式:
何时使用 GET?
您能够使用 GET(默认方法):
如果表单提交是被动的(比如搜索引擎查询),并且没有敏感信息。
当您使用 GET 时,表单数据在页面地址栏中是可见的:
action_page.php?firstname=Mickey&lastname=Mouse
注释:GET 最适合少量数据的提交。浏览器会设定容量限制。

何时使用 POST?
您应该使用 POST:
如果表单正在更新数据,或者包含敏感信息(例如密码)。
POST 的安全性更加,因为在页面地址栏中被提交的数据是不可见的。
GET和POST例子:

from urllib import parse
from urllib import request

data = bytes(parse.urlencode({'word':'hello'}),encoding='utf8')#post方式要定义传递data
response = request.urlopen('http://httpbin.org/post', data=data)#post方式访问
print(response.read().decode('utf-8'))
#输出结果:
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "word": "hello"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Content-Length": "10", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.6"
  }, 
  "json": null, 
  "origin": "113.110.215.45", 
  "url": "http://httpbin.org/post"
}

response2 = request.urlopen('http://httpbin.org/get', timeout=1)#get方式访问
print(response2.read().decode('utf-8'))
#输出结果:
{
  "args": {}, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.6"
  }, 
  "origin": "113.110.215.45", 
  "url": "http://httpbin.org/get"
}

异常捕获处理:

import urllib
import socket

try:
    response3 = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')

http头部信息模拟:

from urllib import request, parse

url = 'http://httpbin.org/post'

headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Connection": "close",
"Cookie": "_gauges_unique_hour=1; _gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1",
"Referer": "http://httpbin.org/",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER"
}

dict = {
'name': 'value'
}

data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换...
    x360阅读 7,222评论 1 20
  • 1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以...
    骚的掉渣阅读 5,171评论 0 0
  • 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是...
    艾小天儿阅读 17,790评论 0 2
  • 一、姓名存储和展现 1. 按学生总表编码存储 李洋薛鹏磊按照学生总表进行编码,并将编码进行存储或者发送 左边是客户...
    果芽软件阅读 10,563评论 0 0
  • 三国,那是个英雄辈出的年代,当问及最喜欢谁的时候,每个心中都会有着自己的答案,而对于我来说,在魏国谋士里最喜欢的人...
    沉着还赤龙阅读 3,596评论 0 0

友情链接更多精彩内容