程序代碼篇---python向http界面發送數據

在 Python 中向 HTTP 界面發送數據,本質上是模擬用戶在網頁上填寫表單、點擊提交按鈕的過程。這在自動化測試、數據上報、接口調用等場景中非常常用。下面用通俗易懂的方式介紹具體方法、實例代碼和解析。

核心原理

網頁上的數據發送(比如提交表單)本質是通過?HTTP 協議?向服務器發送請求。常見的請求方式有兩種:

  • GET:數據通過 URL 傳遞(比如http://xxx.com?name=abc&age=18),適合簡單、少量數據。
  • POST:數據放在請求體內,不顯示在 URL 中,適合敏感數據(如密碼)或大量數據。

Python 中最常用的工具是?requests?庫,它能輕松模擬這兩種請求方式。

準備工作

首先安裝?requests?庫(如果還沒安裝):

pip install requests

方法一:用 GET 方式發送數據

GET 方式將數據附加在 URL 的末尾,格式為??key1=value1&key2=value2。適合發送非敏感的簡單數據。

實例:向接口發送用戶 ID 和操作指令

假設要向?http://example.com/operate?發送兩個數據:

  • user_id:用戶 ID(比如 123)
  • action:操作指令(比如 "start")

代碼實現

import requests# 目標URL
url = "http://example.com/operate"# 要發送的數據(字典形式,key是參數名,value是參數值)
data = {"user_id": 123,"action": "start"
}# 用GET方式發送數據(requests會自動把data拼到URL后面)
response = requests.get(url, params=data)# 打印服務器返回的結果
print("服務器響應狀態碼:", response.status_code)  # 200表示成功
print("服務器返回內容:", response.text)

代碼解析

  1. url?是接收數據的服務器地址。
  2. data?是一個字典,鍵(user_idaction)對應網頁上輸入框的name屬性,值是要發送的內容。
  3. requests.get(url, params=data):發送 GET 請求,params參數會自動將data轉換為 URL 參數(最終請求的 URL 會變成?http://example.com/operate?user_id=123&action=start)。
  4. response.status_code:服務器返回的狀態碼(200 表示成功,404 表示地址不存在等)。
  5. response.text:服務器返回的具體內容(通常是網頁 HTML 或 JSON 數據)。

方法二:用 POST 方式發送數據

POST 方式將數據放在請求體內,不會顯示在 URL 中,更安全。適合發送密碼、表單等敏感或復雜數據。

場景 1:發送表單數據(最常用)

模擬用戶在登錄頁面輸入用戶名和密碼,點擊 "登錄" 按鈕的操作。

代碼實現

import requests# 登錄接口URL
login_url = "http://example.com/login"# 要發送的表單數據(對應網頁上的輸入框)
form_data = {"username": "myuser",  # 用戶名輸入框的name是"username""password": "mypass123",  # 密碼輸入框的name是"password""remember_me": "on"  # 記住登錄的復選框,name是"remember_me"
}# 用POST方式發送表單數據
response = requests.post(login_url, data=form_data)# 處理響應
if response.status_code == 200:print("登錄請求發送成功!")if "登錄成功" in response.text:print("登錄成功!")else:print("登錄失敗,返回內容:", response.text)
else:print("請求失敗,狀態碼:", response.status_code)

代碼解析

  1. form_data?字典中的鍵必須和網頁表單中輸入框的name屬性一致(比如用戶名輸入框<input name="username">,對應鍵就是 "username")。
  2. requests.post(login_url, data=form_data):發送 POST 請求,data參數會將表單數據放在請求體內發送。
  3. 通過判斷響應內容中的關鍵詞(如 "登錄成功"),可以確認服務器是否正確處理了數據。
場景 2:發送 JSON 數據(API 接口常用)

現在很多接口要求發送 JSON 格式的數據(比如前后端分離的網站),需要用json參數而不是data

代碼實現

import requests# API接口URL
api_url = "http://example.com/api/user"# 要發送的JSON數據
json_data = {"name": "張三","age": 25,"hobbies": ["籃球", "編程"]
}# 用POST發送JSON數據(指定json參數)
response = requests.post(api_url, json=json_data)# 解析服務器返回的JSON響應
if response.status_code == 200:result = response.json()  # 自動將JSON響應轉為字典print("服務器返回的結果:", result)
else:print("請求失敗,狀態碼:", response.status_code)

代碼解析

  1. json_data?是一個字典,會被自動轉換為 JSON 格式發送(等價于json.dumps(json_data))。
  2. response.json():如果服務器返回的是 JSON 格式,這個方法可以直接將其轉換為 Python 字典,方便處理。
  3. 這種方式適合調用 RESTful API(比如后端接口、第三方服務)。

方法三:帶請求頭(Headers)發送數據

有些網站會檢查請求頭(Headers),如果發現是程序發送的請求會拒絕。這時需要模擬瀏覽器的請求頭。

實例:模擬瀏覽器發送數據

import requestsurl = "http://example.com/data"# 要發送的數據
data = {"content": "這是一條模擬瀏覽器發送的數據"}# 模擬瀏覽器的請求頭(關鍵是User-Agent,告訴服務器這是瀏覽器)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","Content-Type": "application/x-www-form-urlencoded"  # 表單數據類型
}# 帶請求頭發送POST請求
response = requests.post(url, data=data, headers=headers)print("響應內容:", response.text)

代碼解析

  • headers?字典中的User-Agent字段模擬了 Chrome 瀏覽器的標識,避免服務器識別出這是 Python 程序發送的請求。
  • Content-Type?說明數據類型,表單數據一般用application/x-www-form-urlencoded,JSON 數據用application/json(用json參數時會自動設置)。

方法四:處理 Cookie 和會話(保持登錄狀態)

有些操作需要先登錄(比如購物網站下單),這時候需要保持會話(Session),讓服務器記住我們的登錄狀態。

實例:登錄后保持會話發送數據

import requests# 創建一個會話對象(自動處理Cookie,保持登錄狀態)
session = requests.Session()# 1. 先登錄
login_url = "http://example.com/login"
login_data = {"username": "myuser", "password": "mypass123"}
session.post(login_url, data=login_data)  # 登錄請求會自動保存Cookie# 2. 登錄后發送數據(比如提交訂單)
order_url = "http://example.com/order"
order_data = {"product_id": 456, "quantity": 2}
response = session.post(order_url, data=order_data)  # 會話會自動攜帶Cookieprint("提交訂單結果:", response.text)

代碼解析

  • requests.Session()?創建一個會話對象,它會自動保存服務器返回的 Cookie(登錄憑證)。
  • session.post()代替requests.post(),后續請求會自動攜帶 Cookie,實現 "一次登錄,多次操作",模擬用戶在瀏覽器中保持登錄的狀態。

常見問題解決

  1. 數據發送成功但服務器返回錯誤
    檢查數據的鍵是否和網頁表單的name一致,或者是否遺漏了必填字段(比如驗證碼,不過驗證碼需要額外處理)。

  2. 請求被拒絕(403 錯誤)
    可能是服務器檢測到非瀏覽器請求,添加User-Agent請求頭試試。

  3. 中文亂碼
    服務器返回內容亂碼時,嘗試指定編碼:response.encoding = "utf-8"

總結

向 HTTP 界面發送數據的核心是:

  1. 確定目標 URL(數據接收地址)。
  2. 準備要發送的數據(字典形式,鍵對應網頁表單的name)。
  3. 根據場景選擇 GET(簡單數據)或 POST(敏感 / 復雜數據)。
  4. requests庫發送請求,處理服務器響應。

掌握這些方法后,就可以用 Python 自動化處理各種網頁數據交互了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91102.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mybatis-plus由mysql改成達夢數據庫

前置條件: 達夢數據庫設置了大小寫敏感,我比較菜,改不動!先這么湊合著用吧; 因為設置了大小寫敏感,所以所有的sql語句都要加 引號; 這樣是會報錯的: SELECT remark,createDept,createBy,createTime,updateBy,updateTime FROM sys_oss_config這樣才可以 SELECT "create_…

設計模式:外觀模式 Facade

目錄前言問題解決方案結構代碼前言 外觀是一種結構型設計模式&#xff0c;能為程序庫、框架或其他復雜類提供一個簡單的接口。 問題 假設你必須在代碼中使用某個復雜的庫或框架中的眾多對象。正常情況下&#xff0c; 你需要負責所有對象的初始化工作、 管理其依賴關系并按正確…

【數據結構初階】--二叉樹(四)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

三、平面度檢測-差值法

方法一: dev_get_window (WindowHandle) *讀取3通道彩色融合圖 read_image (Image, ./XYZ彩色融合圖.tiff) *拆分3個通道 decompose3 (Image, x, y, z) *將3個通道圖像轉換為3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *顯示動態3D模型 threshold (z, Regions,…

什么是數據編排?數據編排的流程、優勢、挑戰及工具有哪些?

目錄 一、數據編排的定義與概念 1.數據編排的基本含義 2.數據編排與相關概念的區別 3.數據編排的重要性 二、數據編排的流程 1.需求分析&#xff1a; 2.數據源識別與連接&#xff1a; 3.數據抽取&#xff1a; 4.數據轉換&#xff1a; 5.數據加載&#xff1a; 6.監控…

【C++算法】82.BFS解決FloodFill算法_被圍繞的區域

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 130. 被圍繞的區域 題目描述&#xff1a; 解法 BFS一層層剝開。 C 算法代碼&#xff1a; class Solution {// 定義四個方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商湯發布具身智能平臺,讓機器人像人一樣和現實世界交互

7月27日&#xff0c;在“大愛無疆模塑未來”WAIC 2025大模型論壇上&#xff0c;商湯科技重磅發布「悟能」具身智能平臺。「悟能」具身智能平臺以商湯具身世界模型為核心引擎&#xff0c;依托商湯大裝置提供端側和云側算力支持&#xff0c;能夠為機器人、智能設備提供強大的感知…

MCP工作原理

在談MCP原理前&#xff0c;我們先談談MCP的技術前身—Function Calling。1.Function Calling技術在FunctionCalling技術出現之前&#xff0c;大語言模型雖然擁有強大的知識儲備和語言理解能力&#xff0c;但是只能提供自身數據庫已有的信息&#xff0c;無法和外界進行信息交互。…

VSCode手動版本更新

技術背景 使用VSCode的的過程中&#xff0c;如果打開了自動更新功能&#xff0c;每隔一段時間就會有更新提示。為了保持版本的穩定性&#xff0c;我們可以在設置中將Update: Mode設置為none&#xff0c;這樣就不會觸發自動更新。但有時又有版本更新的需求&#xff0c;可能是版本…

醫療超聲成像專用AFE模擬前端

醫療超聲成像作為一種廣泛應用于臨床診斷的重要技術&#xff0c;對于提供清晰、準確的醫學圖像起著關鍵作用。在超聲成像系統中&#xff0c;AFE模擬前端扮演著至關重要的角色。它負責對超聲換能器接收到的微弱電信號進行處理和轉換&#xff0c;為后續的數字信號處理提供高質量的…

機器學習之線性回歸——小白教學

一、線性回歸簡介1.什么是線性回歸線性回歸(Linear regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。特點&#xff1a;只有?個?變量的情況稱為單變量回歸&#xff0c;多于?個?變量情況的叫做多元回歸線性回…

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布&#xff0c;微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面&#xff0c;旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況&#xff0c;安寶特提出了“AI算法能力開放平臺”&#xff0c;目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…

水下目標識別準確率↑89%!陌訊多模態融合算法在智慧水務的落地實踐

一、行業痛點&#xff1a;智慧水務的檢測困境據《2024城市水務智能化白皮書》統計&#xff0c;傳統水務檢測面臨三大挑戰&#xff1a;??水體干擾??&#xff1a;渾濁度>100NTU時&#xff0c;目標漏檢率高達65%??動態環境??&#xff1a;水流擾動導致目標形變&#xff…

手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中&#xff0c;我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序&#xff0c;并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯&#xff0c;進一步將其封裝為一個圖形化界面程序&#xff0c;借助 Qt Widgets 提供的控件搭建完整的…

量子計算革命:重新定義計算的邊界與未來

引言&#xff1a;我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時&#xff0c;很多人認為這只是實驗室里的科學突破。然而&#xff0c;短短幾年后&#xff0c;量子計算已經從理論走向實踐&#xff0c;從實驗室走向產業應用。我們正站在一個全新的計算…

Python 數據可視化之 Matplotlib 庫

在當今數據驅動的時代&#xff0c;數據可視化&#xff08;Data Visualization&#xff09;已成為數據科學、機器學習、金融分析、工程建模等多個領域中不可或缺的一環。數據可視化不僅幫助我們更直觀地理解數據的分布和趨勢&#xff0c;還能輔助決策、展示研究成果以及增強數據…

Makefile 快速入門指南

Makefile 快速入門指南 什么是Makefile? Makefile 是一個自動化構建工具的配置文件&#xff0c;用于管理代碼編譯、測試和清理等任務。它通過定義規則&#xff08;rules&#xff09;來指定文件之間的依賴關系&#xff0c;當源文件改變時&#xff0c;只重新編譯受影響的部分&…

Linux學習--C語言(指針4、結構體)

1.二維數組的傳參int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指針數組的傳參char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息隊列(五)

在 FreeRTOS 中&#xff0c;任務消息隊列&#xff08;Message Queue&#xff09; 是一種非常關鍵的通信機制&#xff0c;用于在任務之間 傳遞數據、同步事件。 它是實現任務 解耦、異步通信 的核心工具之一&#xff0c;FreeRTOS 的消息隊列是任務之間通信的橋梁。 簡單點說&am…