是 否 有 玫 瑰 悄 然 绽 放

微博图片404 chatgpt教你Rescue

2024.07.14

来源

Tk教主 https://weibo.com/6827625527/Ong3JyBf4?

https://weibo.com/1401527553/HDChc2ekA

微博如何访问被夹的图片 – Helious.wu’s Blog

具体实现

原理在上面这位大佬的博客其实已经说的很清楚了

我们来看看具体如何使用python实现的

原文是使用curl实现的 其中一个关键的步骤是 指定–relsove将请求固定到 IP 地址


我们来问下chatgpt: curl中–resolve的参数 python中有实现吗

以下是她的回答:

curl中的 --resolve 选项允许你将域名解析到特定的IP地址。这个功能在调试和测试环境中非常有用,因为你可以指定域名解析而不必修改系统的DNS设置。

在Python中,可以使用http.client库来实现类似的功能。这需要手动创建一个自定义的HTTP连接对象,并且在连接时指定自定义的主机和端口。

示例:使用http.client实现--resolve

假设你有以下curl命令:

curl --resolve example.com:443:1.2.3.4 https://example.com

这意味着你希望将 example.com 解析为 1.2.3.4,并通过 HTTPS 访问它。下面是如何在Python中实现这一点:

import http.client
import ssl

# 定义目标域名和IP地址
hostname = 'example.com'
resolved_ip = '1.2.3.4'
port = 443

# 创建SSL上下文
context = ssl.create_default_context()

# 创建HTTPS连接
conn = http.client.HTTPSConnection(resolved_ip, port, context=context)

# 设置自定义的主机头
headers = {
    'Host': hostname
}

# 发送GET请求
conn.request("GET", "/", headers=headers)

# 获取响应
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data.decode('utf-8'))

# 关闭连接
conn.close()

解释

  1. 创建SSL上下文: 使用 ssl.create_default_context() 来创建一个默认的SSL上下文。这个上下文将用于HTTPS连接。
  2. 创建HTTPS连接: 使用 http.client.HTTPSConnection 来创建一个HTTPS连接对象,并指定解析后的IP地址和端口。
  3. 设置自定义的主机头: 为了让服务器识别请求的域名,需要在请求头中设置 Host 字段为原始域名。
  4. 发送请求并获取响应: 使用 conn.request 发送GET请求,并使用 conn.getresponse 获取服务器响应。

其他注意事项

  • SSL证书验证: 上述代码创建的SSL上下文默认会验证服务器的SSL证书。如果你在测试环境中使用自签名证书,可能需要禁用SSL验证。这可以通过 ssl._create_unverified_context() 来实现,但不建议在生产环境中使用这种方法。

  • 错误处理: 实际应用中应该添加错误处理逻辑,以应对可能的网络异常和HTTP错误。

这种方法可以实现类似curl --resolve的功能,允许你在Python中指定域名解析到特定的IP地址,并发送HTTP/HTTPS请求。


我们随机找到一个404的微博图片:

查看对应的请求并将其复制到postman, 生成对应的http.client代码如下:

import http.client

conn = http.client.HTTPSConnection("wx3.sinaimg.cn")
payload = ''
headers = {
  'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
  'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
  'priority': 'u=1, i',
  'referer': 'https://s.weibo.com/',
  'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"Windows"',
  'sec-fetch-dest': 'image',
  'sec-fetch-mode': 'no-cors',
  'sec-fetch-site': 'cross-site',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}
conn.request("GET", "/mw690/81d97f6dgy1hrg7uvj4b6j20u03w6tsr.jpg", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

如何你不会将结果保存为图片继续问她:

我请求的是个图片如何将返回的结果保存

# 检查请求是否成功
if response.status_code == 200:
    # 打开文件以写入二进制数据
    with open('image.jpg', 'wb') as file:
        for chunk in response.iter_content(1024):
            file.write(chunk)
    print("图片保存成功")
else:
    print(f"请求失败,状态码: {response.status_code}")

获取CDN的resolve_ip

登录阿里云的拨测挂掉的图片链接 等待10s 导出结果为xlsx

云监控 CloudMonitor (aliyun.com)

我们这里要遍历表格里的所有ip, 接着问:如何使用python遍历excel中的某列

在Python中,遍历Excel文件中的某一列可以使用`pandas`库。以下是一个示例代码,展示如何读取Excel文件并遍历其中的一列。

首先,确保你已经安装了`pandas`库和`openpyxl`库:

```bash
pip install pandas openpyxl
```

然后,你可以使用以下代码来遍历Excel文件中的某一列:

```python
import pandas as pd

# 读取Excel文件
file_path = 'your_excel_file.xlsx'
sheet_name = 'Sheet1'  # 替换为你的工作表名称
column_name = 'Column1'  # 替换为你要遍历的列名

# 使用pandas读取Excel文件
df = pd.read_excel(file_path, sheet_name=sheet_name)

# 遍历指定列
for value in df[column_name]:
    print(value)
```

### 解释

1. **导入`pandas`库**:`pandas`是一个强大的数据处理库,`openpyxl`是一个用于读取Excel文件的引擎。
2. **读取Excel文件**:使用`pd.read_excel`函数读取Excel文件。你需要提供文件路径和工作表名称。
3. **遍历列**:通过`df[column_name]`可以获取指定列的数据,然后使用`for`循环遍历该列。

### 示例Excel文件

假设你的Excel文件`your_excel_file.xlsx`有一个工作表`Sheet1`,其中包含以下数据:

| Column1 | Column2 |
|---------|---------|
| A       | 1       |
| B       | 2       |
| C       | 3       |

运行上述代码后,输出将是:

```
A
B
C
```

这样你就可以遍历Excel文件中的指定列了。如果你有任何其他问题或需要进一步的帮助,请告诉我!

最终将chatgpt和postman生成的代码结合如下:

import http.client
import ssl
import pandas as pd

# 读取Excel文件
file_path = '111.xlsx'
sheet_name = 'page1'  # 替换为你的工作表名称
column_name = '解析结果IP'  # 替换为你要遍历的列名

# 使用pandas读取Excel文件
df = pd.read_excel(file_path, sheet_name=sheet_name)

# 遍历指定列
for resolved_ip in df[column_name]:

    # 定义目标域名和IP地址
    hostname = 'wx3.sinaimg.cn'
    port = 443


# "orj360",
    
    path = '/mw690/81d97f6dgy1hrg7uvj4b6j20u03w6tsr.jpg'

    # 创建SSL上下文
    context = ssl._create_unverified_context()

    # 创建HTTPS连接
    conn = http.client.HTTPSConnection(resolved_ip, port, context=context)

    # 设置自定义的主机头
    headers = {
        'Host': hostname,
        'accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'priority': 'u=1, i',
    'referer': 'https://s.weibo.com/',
    'sec-ch-ua': '"ndNot/A)Bra";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'image',
    'sec-fetch-mode': 'no-cors',
    'sec-fetch-site': 'cross-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
    }

    # 发送GET请求
    conn.request("GET", path, headers=headers)

    # 获取响应
    response = conn.getresponse()

    # 检查请求是否成功
    if response.status == 200:
        # 打开文件以写入二进制数据
        with open(f'{resolved_ip}404.jpg', 'wb') as file:
            file.write(response.read())
        print("图片保存成功")
        break
    else:
        print(f"请求失败,状态码: {response.status}")


    # 关闭连接

    conn.close()

发表评论