服务器无法在发送 http 标头之后修改 cookie.,浏览器在后续请求中不发送cookie

博客内容描述了一个关于用户识别的项目,通过Cookie在localhost上的服务进行实现。当用户访问时,服务返回包含Cookie的响应头。后续的API请求应当携带这个Cookie,但似乎在实际操作中出现了问题。作者检查了请求和响应头,但未能确定遗漏了什么,导致Cookie没有正确传递。
摘要由CSDN通过智能技术生成

使用cookie进行用户识别的项目.

当用户到达时,它会调用该服务(在localhost中运行),并且带有响应头的服务发送cookie如下所示:

curl 'http://127.0.0.1:8000/api/v1.0/tracking' -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://local.com:8080' -H 'Access-Control-Request-Headers: content-type,x-forwarded-for' --compressed

响应标头如下所示:

HTTP/1.1 200 OK

Connection: keep-alive

Keep-Alive: 60

Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, x-forwarded-for

Access-Control-Allow-Origin: *

Access-Control-Allow-Methods: POST, PATCH, GET

Content-Length: 0

Content-Type: text/plain; charset=utf-8

Set-Cookie: id=random_id_123_123; expires=Wed, 06-Dec-2017 10:57:36 GMT; Domain=.local.com; Path=/

然后在特定用户操作后,应用程序发送以下API请求:

curl 'http://127.0.0.1:8000/api/v1.0/tracking?event=video_added&user_id=123123123' -H 'Origin: http://local.com:8080' -H 'Accept: */*' -H 'Referer: http://local.com:8080/' -H 'Connection: keep-alive' --compressed

上述请求的请求标头如下所示:

GET api/v1.0/tracking?event=video_added&user_id=123123123 HTTP/1.1

Host: 127.0.0.1:8000

Connection: keep-alive

Accept: */*

Origin: http://local.com:8080

User-Agent: My user agent

Referer: http://local.com:8080/

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

我期待第一个请求接收cookie(random_id_123_123),因为响应头将是第二个请求的请求头.

该网站运行于:http://local.com:8080(实际上在本地机器上运行,我的vhost配置指向127.0.0.1 local.com),它由python提供服务SimpleHTTPServer.

设置cookie的后端服务也在localhost的端口8000上运行.似乎我在实施过程中遗漏了一些东西.那是什么?

编辑:这是代码.

### 回答1: 为了在 Python 3.6 发送 HTTP/2 POST 请求,你需要安装并使用一个第三方库,比如 httplib2 或者 hyper。 下面是使用 httplib2 库发送 HTTP/2 POST 请求的示例代码: ``` import httplib2 h = httplib2.Http('.cache', disable_ssl_certificate_validation=True) h.add_credentials('username', 'password') response, content = h.request( 'https://http2.example.com/post', 'POST', headers={'Content-Type': 'application/x-www-form-urlencoded'}, body='key1=value1&key2=value2' ) print(response.status) print(content) ``` 如果你想使用 hyper 库发送 HTTP/2 POST 请求,可以使用下面的代码: ``` import hyper s = hyper.Session() r = s.post( 'https://http2.example.com/post', headers={'Content-Type': 'application/x-www-form-urlencoded'}, data='key1=value1&key2=value2' ) print(r.status_code) print(r.text) ``` 希望这些信息对你有帮助! ### 回答2: 要在Python 3.6发送HTTP/2的POST请求,首先需要确保安装了相应的模块,比如`hyper`或`httpx`。以下是使用`httpx`模块发送HTTP/2的POST请求的示例代码: ```python import httpx async def post_request(): url = 'https://example.com' # 替换为目标网址 async with httpx.AsyncClient(http2=True) as client: payload = {'key1': 'value1', 'key2': 'value2'} # 替换为实际的请求参数 headers = {'Content-Type': 'application/x-www-form-urlencoded'} # 替换为实际的请求头部 response = await client.post(url, data=payload, headers=headers) print(response.text) # 需要使用asyncio运行异步函数 import asyncio asyncio.run(post_request()) ``` 在上述代码,`httpx`模块提供了HTTP/2的支持,通过设置`http2=True`参数来启用HTTP/2协议。`post_request()`函数是异步函数,使用`asyncio.run()`函数来运行。 请注意,这仅是一个简单的示例,实际情况下,您可能需要根据目标网址的要求和其他需要的参数进行相应的修改。 ### 回答3: 在Python 3.6,要发送HTTP/2的POST请求,可以使用`http.client`模块的`HTTPConnection`类。这个类提供了一种连接到HTTP服务器发送请求的方法。 首先,我们需要创建一个HTTPConnection对象,将目标主机的服务器地址和端口作为参数传递给它。然后,我们可以使用request()方法来发送POST请求。我们还需要设置一些请求标头,例如Content-Type和Content-Length。 以下是一个示例代码的基本结构,展示了如何发送HTTP/2的POST请求: ```python import http.client # 创建HTTPConnection对象 conn = http.client.HTTPConnection("目标服务器地址", port=端口号) # 设置请求标头 headers = { 'content-type': 'application/json', 'content-length': '长度' } # 设置请求体 body = { 'key1': 'value1', 'key2': 'value2' } # 发送POST请求 conn.request("POST", "/目标路径", body, headers) # 获取响应 res = conn.getresponse() # 打印响应状态码和内容 print(res.status, res.read().decode()) ``` 请注意,以上示例代码只是一个基本结构,需要根据你的具体需求进行进一步修改。例如,将目标服务器地址、端口号和其它请求参数替换为正确的值。 此外,在使用以上代码之前,你需要在Python环境安装相应的依赖包,例如`hyper`、`h2`等,以确保支持HTTP/2协议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值