https脚本python和bash版本

以下是一个使用 `curl` 的 Bash 脚本,可以发送 HTTPS 的 GET 和 POST 请求,同时支持 cookies 和gzip 压缩:

```bash

#!/bin/bash

默认配置

COOKIE_FILE="cookies.txt" # 存储cookies的文件

USER_AGENT="Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"

ACCEPT_ENCODING="gzip, deflate, br"

帮助信息

function usage() {

echo "Usage: $0 get\|post <URL> DATA"

echo "Options:"

echo " get - 发送 HTTPS GET 请求"

echo " post - 发送 HTTPS POST 请求"

echo " URL - 请求的目标URL"

echo " DATA - POST 请求的数据,格式为 \"key1=value1&key2=value2\""

echo "Example:"

echo " $0 get https://example.com"

echo " $0 post https://example.com 'param1=value1&param2=value2'"

}

GET 请求函数

function http_get() {

local url="$1"

curl -s -L -b "COOKIE_FILE" -c "COOKIE_FILE" -A "$USER_AGENT" \

-H "Accept-Encoding: ACCEPT_ENCODING" "url"

}

POST 请求函数

function http_post() {

local url="$1"

local data="$2"

curl -s -L -b "COOKIE_FILE" -c "COOKIE_FILE" -A "$USER_AGENT" \

-H "Accept-Encoding: ACCEPT_ENCODING" -d "data" "$url"

}

参数检查

if \[ $# -lt 2 ]; then

usage

exit 1

fi

根据参数选择GET或POST

method="$1"

url="$2"

data="$3"

case "$method" in

get)

http_get "$url"

;;

post)

if \[ -z "$data" ]; then

echo "Error: POST request requires data."

usage

exit 1

fi

http_post "url" "data"

;;

*)

echo "Error: Invalid method. Use 'get' or 'post'."

usage

exit 1

;;

esac

```

脚本说明

  • **COOKIE_FILE**:指定存储 cookies 的文件(每次请求会自动更新 cookies)。

  • **USER_AGENT** 和 **ACCEPT_ENCODING**:模拟浏览器访问,并指定支持 gzip、deflate 压缩。

  • **http_get** 和 **http_post**:分别定义 GET 和 POST 请求函数,使用 `curl` 执行请求。

  • **用法**:运行时指定请求类型(get/post)、目标 URL 以及(若为 POST 请求)请求数据。

使用示例

```bash

发送 GET 请求

./script.sh get "https://example.com"

发送 POST 请求

./script.sh post "https://example.com" "param1=value1&param2=value2"

```

这样,该脚本可以发送 GET 和 POST 请求,同时支持 cookies 和 gzip。

下面是一个用 Python 编写的支持 HTTPS 请求、gzip、cookies 和自定义 header 的程序,使用`requests` 库实现。

```python

import requests

class HttpClient:

def init(self):

初始化一个带 cookies 的会话

self.session = requests.Session()

默认 headers

self.session.headers.update({

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36",

"Accept-Encoding": "gzip, deflate, br",

"Accept": "application/json, text/plain, */*"

})

def set_headers(self, headers):

"""更新请求头"""

self.session.headers.update(headers)

def get(self, url, params=None):

"""发送 HTTPS GET 请求"""

try:

response = self.session.get(url, params=params)

response.raise_for_status()

return response

except requests.RequestException as e:

print(f"GET request failed: {e}")

return None

def post(self, url, data=None, json=None):

"""发送 HTTPS POST 请求"""

try:

response = self.session.post(url, data=data, json=json)

response.raise_for_status()

return response

except requests.RequestException as e:

print(f"POST request failed: {e}")

return None

def close(self):

"""关闭会话"""

self.session.close()

示例用法

if name == "main":

client = HttpClient()

自定义 header

custom_headers = {

"Authorization": "Bearer your_token_here"

}

client.set_headers(custom_headers)

发送 GET 请求

url = "https://jsonplaceholder.typicode.com/posts"

response = client.get(url)

if response:

print("GET response:", response.json())

发送 POST 请求

url = "https://jsonplaceholder.typicode.com/posts"

data = {

"title": "foo",

"body": "bar",

"userId": 1

}

response = client.post(url, json=data)

if response:

print("POST response:", response.json())

关闭客户端

client.close()

```

代码说明

  • **HttpClient 类**:封装了一个 HTTPS 客户端,支持 GET 和 POST 请求。

  • **`set_headers` 方法**:允许动态更新请求头。

  • **gzip 和 cookies 支持**:`requests` 库会自动处理 gzip 压缩和 cookies,因此无需手动操作。

  • **异常处理**:使用 `try-except` 块来捕获请求失败的情况,并输出错误信息。

示例用法

  • 自定义 header 示例:设置一个带 `Authorization` 字段的 header。

  • GET 和 POST 请求示例:分别演示如何发送请求并解析 JSON 响应。

确保安装 `requests` 库,使用以下命令:

```bash

pip install requests

```

以下是一个使用 Python 的 `requests` 库实现的支持 HTTPS 请求的脚本,支持 gzip、cookies 和自定义headers。`requests` 库是 Python 中非常流行的 HTTP 请求库,且在 Windows 下容易安装和使用。

代码

```python

import requests

class HTTPSClient:

def init(self):

初始化 session 用于保持 cookies

self.session = requests.Session()

默认 headers 设置,支持 gzip

self.session.headers.update({

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0 Safari/537.36',

'Accept-Encoding': 'gzip, deflate, br'

})

def set_headers(self, headers):

"""设置自定义 headers"""

self.session.headers.update(headers)

def get(self, url, params=None):

"""发送 HTTPS GET 请求"""

try:

response = self.session.get(url, params=params)

response.raise_for_status() # 检查是否请求成功

return response.text # 返回响应内容

except requests.RequestException as e:

print(f"GET 请求出错: {e}")

return None

def post(self, url, data=None):

"""发送 HTTPS POST 请求"""

try:

response = self.session.post(url, data=data)

response.raise_for_status()

return response.text

except requests.RequestException as e:

print(f"POST 请求出错: {e}")

return None

def close(self):

"""关闭 session"""

self.session.close()

使用示例

if name == "main":

client = HTTPSClient()

设置自定义 headers

custom_headers = {

'X-Custom-Header': 'CustomValue'

}

client.set_headers(custom_headers)

发送 GET 请求

url = "https://httpbin.org/get"

response = client.get(url)

if response:

print("GET 响应内容:", response)

发送 POST 请求

url = "https://httpbin.org/post"

data = {

"key1": "value1",

"key2": "value2"

}

response = client.post(url, data=data)

if response:

print("POST 响应内容:", response)

关闭 client

client.close()

```

说明

  • **HTTPSClient 类**:创建一个简单的 HTTPS 客户端封装类,使用 `requests.Session` 对象来维持会话,便于处理 cookies。

  • **`set_headers` 方法**:允许用户传入一个字典,用于设置或更新自定义的 HTTP headers。

  • **`get` 和 `post` 方法**:分别用于发送 GET 和 POST 请求。

  • `params` 参数用于 GET 请求的 URL 参数,`data` 参数用于 POST 请求的表单数据。

  • 请求成功时,返回响应内容,出错时输出错误信息。

  • **gzip 支持**:通过 `Accept-Encoding` 头中的 `gzip` 和 `deflate` 设置自动解压缩。

  • **关闭 Session**:调用 `close()` 方法关闭会话以释放资源。

运行环境

确保 `requests` 库已安装,可以用以下命令在命令行安装:

```bash

pip install requests

```

示例输出

运行后,脚本会发送一个 GET 请求和一个 POST 请求,并打印响应内容。

相关推荐
蓝胖的四次元口袋2 小时前
服务器网络与系统基础-面试题
服务器·网络
程序员JerrySUN3 小时前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
视觉AI4 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
明志数科4 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒4 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
欧神附体1234 小时前
在虚拟机中添加网卡,修改网卡名并关闭SElinux
linux·服务器·网络
德迅云安全-上官5 小时前
源站隐身 + 流量清洗,高防 IP 品牌实力精选
网络·网络协议·tcp/ip
Triv20255 小时前
Profinet与Modbus协议转换网关HD67602的硬件特性与配置方法
网络·plc·modbus·profinet·工业网关·协议转换
珠***格7 小时前
XGF10-Z-4典型接入方式解析:10千伏专变用户380伏多点分布式光伏如何并网?
网络·人工智能·分布式·安全·边缘计算
盟接之桥7 小时前
跨越数字鸿沟,重塑全球信任:盟接之桥EDI如何以长期主义赋能中国制造出海
网络·人工智能·安全·汽车·制造