1. 程式人生 > >Golang傳送post表單請求

Golang傳送post表單請求

先寫一個可以接收post請求的伺服器:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/postpage", func(w http.ResponseWriter, r *http.Request) {
		//接受post請求,然後打印表單中key和value欄位的值
		if r.Method == "POST" {
			var (
				key   string = r.PostFormValue("key")
				value string = r.PostFormValue("value")
			)
			fmt.Printf("key is  : %s\n", key)
			fmt.Printf("value is: %s\n", value)
		}
	})

	err := http.ListenAndServe(":80", nil)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
}


然後我們使用net/http包來發送post請求:

package main

import (
	"fmt"
	"net/http"
	"net/url"
)

func main() {
	//這裡新增post的body內容
	data := make(url.Values)
	data["key"] = []string{"this is key"}
	data["value"] = []string{"this is value"}

	//把post表單傳送給目標伺服器
	res, err := http.PostForm("http://127.0.0.1/postpage", data)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer res.Body.Close()

	fmt.Println("post send success")
}

如果你不想用現成的包,那麼下面這段程式碼就是直接通過HTTP協議實現post請求,執行效果和上面這段程式碼一樣:

package main

import (
	"fmt"
	"net"
)

func main() {
	//因為post方法屬於HTTP協議,HTTP協議以TCP為基礎,所以先建立一個
	//TCP連線,通過這個TCP連線來發送我們的post請求
	conn, err := net.Dial("tcp", "127.0.0.1:80")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer conn.Close()

	//構造post請求
	var post string
	post += "POST /postpage HTTP/1.1\r\n"
	post += "Content-Type: application/x-www-form-urlencoded\r\n"
	post += "Content-Length: 37\r\n"
	post += "Connection: keep-alive\r\n"
	post += "Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\r\n"
	post += "\r\n"
	post += "key=this is key&value=this is value\r\n"

	if _, err := conn.Write([]byte(post)); err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println("post send success.")
}


執行第一段程式碼的程式,然後執行一下第二個或第三個程式來發送post請求,執行結果如圖:

如果轉載請註明出處:http://blog.csdn.net/gophers/article/details/22870185

相關推薦

Golang傳送post請求

先寫一個可以接收post請求的伺服器: package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/postpage", func(w http.ResponseWriter,

java 後臺模擬post請求傳送key-value資料亂碼

首先是key-value的模型: public class PostValue {       private String key;           private String value;        public PostValue(String key, S

PHP使用CURL向Python,Golang傳送檔案上傳檔案[HTTP協議下Api]

PHP傳送方程式碼段: <?php /** * htppCurl表單上傳檔案 * @param $file FILE_ADDR * @param string $url uri * @param string $key key * @return bool|mixed *

Spring MVC 接收POST請求,獲取引數總結

                 前段時間遇到一個問題,在spring mvc 服務端接收post請求時,通過html 表單提交的時候,服務端能夠接收到引數的值。但是使用httpclient4.3構造post請求,卻無法接收到引數的值。spring 程式碼:    @RequestMapping(value 

Django + Ajax傳送POST,並將返回資訊回顯到頁面中

將表單資料傳送回後端,然後處理後端返回的資訊並顯示在當前頁面中,這裡使用Ajax進行處理; 那麼先看js程式碼: <!--以下為 Ajax指令碼 --> <script src="http://apps.bdimg.com/li

golang傳送post的json請求

package main import ( "encoding/json" "log" "net/http" ) type test_struct struct { Test string } //func test(rw http.ResponseWriter, req *

AJAX的請求POST請求方式

表單資料的提交 action : 資料提交的地址,預設是當前頁面 method : 資料提交的方式,預設是get方式 post: 把資料名稱和資料值用=連線,如果有多個的話,那麼他會把多個數據組合用&a

ajax請求傳送form資料以及中文亂碼處理

將資料放在form表單中通過form.submit去提交資料是我們常用也很方便的請求方式,但是有時候我們需要不重新整理頁面去處理資料,這個時候就要用到ajax,並且查詢的資料存放在form表單中,有時

使用httppost請求傳送form的方法

本人在使用httpclient做介面自動化的過程中,遇到了post請求提交資料是form表單,因為我從資料庫讀取到的case是map形式的,所以經常嘗試和驗證,寫了一個方法把map裡面的資料轉化為form表單,然後使用post請求傳送資料。下面是轉化和設定方法,分享出來,供

利用ajax異步處理POST中的數據

利用 tex oda checkbox nbsp st表 success target .ajax //防止頁面進行跳轉 $(document).ready(function(){ $("#submit").click(function(

layui點擊彈框頁面 請求

點擊 .post msg inline nbsp ces 相關 block mes $("#addSite").click(function () { layer.open({ title: ‘添加站點‘, type: 1,

laravel 的 請求

依賴 相同 AS tis 創建表 需要 文章 創建 font 在對文章、帖子等信息進行創建、更新的時候,需要進行表單驗證的時候,一般我們使用Request來獲取輸入的值來進行驗證,這樣需要在每一個方法中進行書寫驗證規則。 laravel 提供了創建表單請求,我們可以使用

Laravel 5.5 FormRequest 自定義請求驗證類

根目錄 use his extends 數據 不一致 不能 登錄模塊 能夠 1、把表單驗證邏輯寫在Controller中,這是最基礎的方法,但是不好維護,如: 1 namespace App\Http\Controllers\Admin; 2 3 use Illu

Ajax的post,不在url後接一大串參數鍵值對的方法

url efault opp 解決方案 數值 .cn 寫上 prevent sub $(‘#loginForm‘).on(‘submit‘,function (ev) { //阻止表單參數附在url後面 ev.stopPropagation

向指定 URL 傳送POST方法的請求(狀態碼200和其他有區別)

public static String sendPost(String url, String param) { OutputStreamWriter out = null; BufferedReader in = null; String result = ""; t

【laravel】 複雜請求驗證類,實現一個類對應多個

一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵。本篇教程就不說這個了,需要了解的請戳這裡。第二種就是建立請求驗證類,下面就詳細說

HttpSenderUtil向指定 URL 傳送POST方法的請求

package com.founder.ec.common.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.P

【laravel】 複雜請求驗證類,實現一個類對應多個

一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵

curl post上傳檔案(C++)

最近測試如何上傳檔案到伺服器。原來傳照片一致通過binary 形式傳檔案,或者把圖片base64編碼傳圖片。一致沒有用form-data 表單形式傳送資料,今天嘗試下如何使用libcurl提供的API上傳檔案。 Sample code: #include <

Request物件接收請求引數的中文亂碼處理

在開發中,很多人會遇到使用Request物件接收表單請求引數會遇到中文亂碼,至於怎麼處理呢?只需要瞭解其產生亂碼的原因,處理起來還是很容易的,接下來用程式碼演示: * Request接收中文資料 */ public class RequestDemo3 ext