HTTP学习之请求与响应(结合实例查看直接看总结部分)

请求:每个请求由三部分组成:请求行、请求头和请求体。

1.请求行:包括请求方法(如 GET、POST 等)、请求的 URL 路径、HTTP 版本。

请求行通俗来讲就是规定:在链接中干什么。

格式如下:

方法 路径 HTTP版本

2.请求头:包含元数据信息,例如主机名、User-Agent 等,描述请求的特性。

请求头通俗来说就是:提供一些额外信息来告诉服务器具体我想要什么。

常见请求头:

  • Host:指定请求的目标主机名和端口。 示例:Host: www.example.com,用于告诉服务器请求的目标主机。
  • User-Agent:标识客户端应用程序的类型(如浏览器)。 示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64),用于让服务器识别客户端设备类型。
  • Accept:告知服务器客户端可处理的内容类型。 示例:Accept: application/json,表示客户端希望接收 JSON 格式的数据。
  • Content-Type:描述请求体的格式。 示例:Content-Type: application/json,用于告诉服务器请求体的数据类型是 JSON。
  • Authorization:提供认证信息,例如访问受保护资源所需的令牌。 示例:Authorization: Bearer <token>,用于在请求中提供身份认证信息,例如API key。

3.请求体:包含需要传递给服务器的数据实际内容。

比如常见的用户在某个网页填写的登录信息,就会被浏览器会放入请求体中,发送到服务器处理。

请求体的格式: 请求体的数据格式取决于请求头中的Content-Type字段。

常见的格式包括:

  • application/x-www-form-urlencoded:类似于我们在浏览器填写登录信息时的链接后的一串信息
name=JohnDoe&age=25&city=NewYork
  • application/json:就是json的格式
{
"name": "John Doe",
"age": 25,
"city": "New York"
}
  • text/plain:简单的文本内容。
Hello, this is plain text.

响应:同样是三部分,包括状态行,响应头,响应体

1.状态行:包括 HTTP 版本、状态码和状态文本。

HTTP版本:服务器支持的HTTP协议版本(如HTTP/1.1HTTP/2)。

状态码(Status Code):表示请求请求处理的结果状态,是否成功,是什么问题。状态码是一个三位数字,根据不同的状态用不同的数字段表示,例如经常见到的404 NOT Found的404。

状态码比较多详情可以查看https://www.runoob.com/http/http-status-codes.html,分为5类:

  • 1xx 信息响应:指示请求已被接收且处理中。
  • 2xx 成功响应:表明请求成功。
  • 3xx 重定向响应:表明请求需要客户端进一步处理。
  • 4xx 客户端错误:客户端请求出错,服务器无法处理。
  • 5xx 服务器错误:服务器在处理请求时发生了错误。

状态描述(Reason Phrase):对状态码的简短描述。

格式为:

HTTP版本 状态码 状态描述 
HTTP/1.1 200 OK

2.响应头:包含元数据,如内容类型、日期等,描述响应的特性。

常见响应头

Content-Type:告知客户端响应体的媒体类型。

示例:Content-Type: application/json,表示响应体的数据是 JSON 格式。

Date:服务器返回响应的日期和时间。

示例:Date: Tue, 08 Oct 2024 14:00:00 GMT,用于告知客户端响应的生成时间。

Set-Cookie:在客户端设置cookie,用于后续请求保持会话状态。 示例:Set-Cookie: sessionid=abc123; Expires=Wed, 09 Oct 2024 12:45:00 GMT

Cache-Control:指示客户端如何缓存响应数据。

示例:Cache-Control: no-cache,表示不要缓存该响应。

3.响应体:包含服务器返回的资源数据,例如 HTML 页面、JSON 数据等。

响应体的数据格式取决于响应头中的 Content-Type 字段。

常见格式

text/html:HTML 文档,用于呈现网页内容。

application/json:JSON 格式的数据,通常用于 API 响应。

text/plain:简单的文本内容。

总结(以调用通义千问的api为例):

请求:HTTP请求是客户端向服务器发送的消息,包含获取资源或执行操作的请求信息,如请求行请求头请求体

POST /compatible-mode/v1/chat/completions HTTP/1.1                    // 请求行:方法 路径 HTTP版本
Host: dashscope.aliyuncs.com                                          // 请求头:目标主机名
Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx             // 请求头:Authorization提供API密钥认证信息
Content-Type: application/json                                        // 请求头:Content-Type表示请求体的格式
Content-Length: 220                                                   // 请求头:请求体的长度

{
  "model": "qwen-plus",                                               // 模型名称
  "messages": [
    {
      "role": "system",                                               // 系统消息角色
      "content": "You are a helpful assistant."                       // 系统设定内容
    },
    {
      "role": "user",                                                 // 用户消息角色
      "content": "你是谁?"                                            // 用户输入内容
    }
  ],
  "max_tokens": 100,                                                  // 最大token
  "temperature": 0.7                                                  // 控制生成内容的随机性
}

一般我们通过代码来,这里不使用它的客户端而是使用使用requests库的直接HTTP调用,便于理解:

import requests
import json

# API端点URL
url = "<https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions>"

# 设置请求头
headers = {
    "Authorization": "Bearer your_dashscope_api_key",  # 将your_dashscope_api_key替换为你的实际API密钥
    "Content-Type": "application/json"
}

# 设置请求体数据
data = {
    "model": "qwen-plus",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "你是谁?"
        }
    ]
}

# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(data))

# 打印响应内容
if response.status_code == 200:
    print("Response:", response.json())
else:
    print(f"Error: {response.status_code}")
    print(response.text)

响应:HTTP响应是服务器返回给客户端的消息,包含请求结果的状态码、响应头以及所需的资源或数据。

HTTP/1.1 200 OK                                                     // 响应行:表示请求成功
Content-Type: application/json                                      // 响应头:返回的内容格式为JSON
Content-Length: 348                                                 // 响应头:响应体的长度

{
  "id": "completion-5yMTnLlE2eWL9kDbd4K9tT",
  "object": "chat.completion",                                       // 响应体:表示这是一个聊天补全的结果
  "created": 1689000000,                                             // 响应体:请求生成时间的时间戳
  "model": "qwen-plus",                                              // 响应体:使用的模型
  "choices": [
    {
      "message": {
        "role": "assistant",                                         // 角色是助手
        "content": "我是通义千问,一个由阿里云提供的智能助手。"           // 助手生成的响应内容
      },
      "finish_reason": "stop",                                       // 结束原因:生成完成
      "index": 0                                                     // 响应结果的索引,多个响应时用
    }
  ],
  "usage": {
    "prompt_tokens": 12,                                             // 使用的提示词的token数
    "completion_tokens": 15,                                         // 生成的文本的token数
    "total_tokens": 27                                               // 总共消耗的token数
  }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值