如何用Python逐行读取文件内容并发起对应HTTP请求
解决Python逐行读取文件并发起HTTP请求的问题
你的核心问题是直接使用readlines()返回的列表拼接URL,导致整个列表被作为参数传递,而不是逐行处理每个内容。下面是具体的解决方法和优化代码:
问题分析
原代码中user = open("user.txt","r").readlines()会返回一个包含每行内容的列表(比如['1\n', '2\n', '3\n']),直接和URL字符串拼接时,Python会把列表转换成它的字符串表示形式,最终请求的URL变成http://example.com/r=['1\n', '2\n', '3\n'],这显然不符合需求。
正确实现代码
基础版本(满足需求)
import requests # 用with语句安全读取文件,自动管理文件资源 with open("user.txt", "r") as file: # 逐行遍历文件内容 for line in file: # 去除每行末尾的换行符和前后空白字符 user_param = line.strip() # 跳过空行(避免处理无效内容) if not user_param: continue # 发起HTTP请求,拼接正确的URL response = requests.get(f"http://example.com/r={user_param}") # 可选:打印请求结果,方便调试 print(f"请求参数{user_param},响应状态码:{response.status_code}")
优化版本(更规范、更健壮)
推荐使用params参数传递查询参数(自动处理URL编码),并添加异常处理避免程序崩溃:
import requests from requests.exceptions import RequestException with open("user.txt", "r") as file: for line in file: user_param = line.strip() if not user_param: continue try: # 用params传递参数,更安全规范 response = requests.get("http://example.com", params={"r": user_param}) # 检查HTTP响应状态,非200则抛出异常 response.raise_for_status() print(f"请求{user_param}成功:{response.text[:50]}") except RequestException as e: print(f"请求{user_param}失败:{str(e)}")
关键注意事项
- 处理换行符:
readlines()或逐行读取的每行末尾会带有\n,必须用strip()去除,否则请求参数会包含无效的换行符。 - 文件资源管理:使用
with语句打开文件,Python会自动在代码块结束后关闭文件,避免资源泄漏。 - 参数传递规范:直接拼接URL容易出现编码问题(比如参数包含特殊字符),用
params参数可以让requests自动处理URL编码,更可靠。 - 异常处理:网络请求可能出现各种错误(比如连接失败、HTTP错误),添加异常处理可以让程序更健壮。
内容的提问来源于stack exchange,提问作者Vickyz Setiawan
相关产品推荐
相关产品推荐

