专栏首页用户2119464的专栏python_web(一)实现HTTP客户端的程序

python_web(一)实现HTTP客户端的程序

#实现HTTP客户端的程序
# coding: utf-8

import socket


s = socket.socket()
host = 'g.cn'
port = 80
s.connect((host, port))
ip, port = s.getsockname()
print("本机 ip 和 port {} {}".format(ip, port))

http_request = "GET / HTTP/1.1\r\nhost:{}\r\n\r\n".format(host)
request = http_request.encode('utf-8')
print('请求', request)
s.send(request)

response = s.recv(1023)
print('响应', response)
print('响应的 str 格式', response.decode('utf-8'))

s.close()

以上程序中所用到的知识点如下:

  • socket模块

#操作系统用来进行网络通信的底层方案 #即用来发送/接收数据

  • 创建socket对象

用法: s = socket.socket()

  • 服务器端socket函数 connect()

用法: s.connect(address) #链接到address #一般address的格式为tuple(host, port) #链接出错,返回socket.error错误

  • socket函数 getsockname()

用法:ip, port = s.getsockname() #连接上后,可通过该函数得到本机的 ip 和端口 #返回值通常是tuple(ip, port)

  • 元组的值赋给不同的变量

用法:

a, b = (1, 2) print(a)

  • 另一种格式化输出

用法:print("{} {}".format(变量1, 变量2)) #好处:不用判断变量的格式

  • http请求格式

"GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n" #目前该请求格式未包含body的请求 #GET 是请求的方法(POST也是一种) # / 是请求的路径 # HTTP/1.1 是一种HTTP版本 # host 是请求主机域名

  • str.encode('utf-8')

#编码:把 str 转换为 bytes,编码是 utf-8 str.decode('utf-8') #解码:把 bytes 转换为 str,编码是 utf-8 #返回值即为转换结果

  • socket函数 send()

用处:s.send(参数) #发送 HTTP 请求(即参数内容)给服务器 # send 函数只接受 bytes 作为参数

  • socket函数 recv()

用法:response = s.recv(1023) #接受服务器的响应数据 #参数即为接收的最大数据量 #返回值即为相应数据,为bytes类型

  • 客户端编程思想总结(socket)

创建套接字并链接至远端地址

s = socket.socket() s.connect()

连接后发送数据和接收数据

s.send() s.recv()

传输完毕后,关闭套接字

s.close

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python入门(六)查天气小程序(python3)

    星辉
  • python_web(二)实现服务器端的程序

    星辉
  • geth 搭建 私有链节点

    作为区块链的起始区块,其他区块直接或间接引用到创世区块。因此要运行以太坊私有链,需要定义自己的创世区块,创世区块信息写在一个 JSON 格式的配置文件中。

    星辉
  • 玩转 PHP 网络编程全套之数据接收与发送

    它是一个复杂的协议族,但是经过层层封装之后转换为网络数据帧经过网卡发送出去的,当然在发送之前会先发起一次ARP请求查询一下对方的mac物理地址,对方响应后返回以...

    桶哥
  • 你到底是对称还是不对称?

    至此,总结下,大部分情况下使用对称加密,具有比较不错的安全性。如果需要分布式进行秘钥分发,考虑非对称。如果不需要可逆计算则散列算法。因为这段时间有这方面需求,就...

    我是程序员小贱
  • [转]Boosting

    Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。Boosting是一种提高...

    闪电gogogo
  • Java|无效的目标发行版:11解决方案

    有时候当测试运行项目时,可能会在控制台输出无效的目标发行版:XX,这是可能由于版本的原因导致,比如出现如下,图1.1的问题:

    算法与编程之美
  • 自动驾驶中机器学习算法应用大盘点

    今天,机器学习算法被广泛应用于解决自动驾驶汽车制造的各种挑战问题中。人类将传感器数据处理集成到汽车的ECU(电子控制单元)中。 提高机器学习的利用率去完成新...

    AiTechYun
  • 优化算法领军人物带你概览机器学习算法,蓝光辉教授新书面世

    机器学习算法领域近期出现了大量研发进展,但目前社区尚缺乏对机器学习算法基础概念和近期进展的系统性介绍,尤其是基于随机优化方法、随机算法、非凸优化、分布式与在线学...

    机器之心
  • 趣味算法图解,高清无码图免费下载

    IDEA 是由 SándorP. Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。目前里面提供了九张...

    五分钟学算法

扫码关注云+社区

领取腾讯云代金券