应用层的网络请求
用Requests库,来访问

#使用requests库来访问
import requests
def query(name):url="http://api.apiopen.top/searchPoetry"parameters={'name':name}request=requests.get(url,params=parameters)content=request.json()print(name)print(content['result'][0]['content'])
query('杜甫')

运行结果:

杜甫
万里飘零独此身,诗魂终恋浣花村。|宁贫宁冻宁饥死,一饭何曾忘至尊。

直接用HTTP协议来访问

import http.client
import json
from urllib.parse import quote
base='/searchPoetry'
def query(name):path='{}?name={}'.format(base,quote(name))conn=http.client.HTTPConnection('api.apiopen.top')conn.request('GET',path)rawreply=conn.getresponse().read()reply=json.loads(rawreply.decode('utf-8'))print(name)print(reply['result'][0]['content'])
query('李白')

这个程序比上一个程序更基础一些。
运行结果:

李白
风骨神仙籍里人,诗狂酒圣且平生。|开元一遇成何事,留得千秋万古名。

用python的网络协议栈的最低层socket实现

import socket
from urllib.parse import quote
request_text="""
GET /searchPoetry?name{} HTTP/1.1\r\n\
Host: api.apiopen.top:80\r\n\
User-Agent: search.py(Foundations of Python Network Programming)\r\n\
Connection: close\r\n\
\r\n\
"""
def search(name):sock = socket.socket()sock.connect(('api.apiopen.top', 80))request=request_text.format(quote(name))sock.sendall(request.encode('utf-8'))raw_reply=b''while True:more=sock.recv(1024)if not more:breakraw_reply+=moreprint(raw_reply.decode('utf-8'))
search('杜甫')

运行结果:


HTTP/1.1 200
Server: nginx
Date: Thu, 18 Oct 2018 08:36:27 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: close2c
{"code":200,"message":"成功!","result":[]}
0

不知为什么result为空,不知有哪位大佬可以解决下。

各个协议层的网络请求相关推荐

  1. Fragment标签页+OKHttp网络请求数据+MVP模式

    分包方式 需要的第三方依赖 Fragment 新建两个fragment MainActivity 主页面布局 设置Fragment+tablayout的适配器 Fragment标签页结束 OKHttp ...

  2. iOS 使用Moya网络请求

    Moya最新版本11.0.2 由于前段时间写了这篇文章,最新Moya已更新最新版本,故此也更新了下用法,本人已使用,故特意奉上最新的使用demo供参考. Moya11.0.2Demo Moya简介 M ...

  3. WireShark 探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)

    ​当我们在浏览器输入URL点击确认后,浏览器展示出网页信息.可你曾想过这其中的过程是怎样的?理论性较强的朋友可能知道后续DNS会解析地址,然后TCP/IP三次握手建立起连接,紧接着客户端与服务器开始传 ...

  4. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  5. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  6. (chap1 web网络基础) TCP/IP协议层

    1. HTTP( HyperText Transfer Protocol) 超文本传输协议 2. TCP/IP协议层 应用层 应用层决定了向用户提供应用服务时通信的活动. TCP/P协议族内预存了各类 ...

  7. 分析udp数据报_Linux内核网络udp数据包发送(二)——UDP协议层分析

    1. 前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调 ...

  8. Linux内核网络udp数据包发送(二)——UDP协议层分析

    1. 前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调 ...

  9. Linux内核网络UDP数据包发送(三)——IP协议层分析

    1. 前言 Linux内核网络 UDP 协议层通过调用 ip_send_skb 将 skb 交给 IP 协议层,本文通过分析内核 IP 协议层的关键函数来分享内核数据包发送在 IP 协议层的处理,并分 ...

最新文章

  1. Vue:Vue和ECharts,在Vue上进行可视化处理,在Vue上画图
  2. SQL Server 迁移数据到MySQL
  3. 我泡在GitHub上的177天 by Ryan Seys
  4. 远程过程调用(Remote Procedure Call,RPC)
  5. 40种Javascript中常用的使用小技巧【转】
  6. ssh scp不用输入密码
  7. C Looooops POJ - 2115 (exgcd)
  8. SWF播放器object DEMO
  9. android studio gradle下载
  10. eclipse配置折叠/展开代码设置
  11. 2020校园招聘公司列表!计算机/互联网 技术类岗位!,一直更新!
  12. 只有在喝醉的时候,我才会喜欢自己
  13. 最优化方法 18:近似点算子 Proximal Mapping
  14. FusionAccess桌面云介绍
  15. 两台计算机互联方案,如何让两台电脑直接用网线互联.docx
  16. php获取蓝凑云文件列表,自制蓝奏云网盘解析接口全解
  17. aistudio解压zip
  18. mysql 查询名字包括下划线_Python 之 MySql 每日一练 329——查询名字中含有风字的学生信息...
  19. JavaScript-事件之onmousemove
  20. XP安装SQLSERVER企业版

热门文章

  1. 需求工程——软件建模与分析阅读笔记04
  2. Riscv五级流水线64位cpu,systemverilog编写,指令集rv64i,支持csr寄存器,可跑通dhrystone测试
  3. 达人篇:3.3)六西格玛
  4. centos系统进行pppoe拨号
  5. dos2unix命令使用说明
  6. matplotlib绘图输出中文字体【可以使用自己下载的字体】
  7. excel批量生成超链接(VBA代码)
  8. OpenFPGA: 一起跨年吧!
  9. Chrome浏览器安装插件提示“无法从该网站添加应用,拓展程序或脚本”解决办法
  10. 【魔法圣诞树】代码实现详解 --多种实战编程技巧倾情打造