求教golang中http发送post请求gb2312编码的解决方案

Python014

求教golang中http发送post请求gb2312编码的解决方案,第1张

用Post,不要用PostForm,至於编码可以自己用2楼的方法然后urlencode,附上代码片段

resp, err := http.Post(reqUrl,"application/x-www-form-urlencoded",strings.NewReader(fmt.Sprintf("__VIEWSTATE=%s&__EVENTVALIDATION=%s&txtUid=000000000&txtPwd=xxxxxxxx&selKind=1&selKind=1&btLogin=%B5%C7%C2%BD",url.QueryEscape(viewstate),url.QueryEscape(eventvalidation),)),)

报错信息如下:

[logid: 3628171316][json.err: EOF] [exception:EOF] goroutine 20521 [running]:

原因:

在请求体为json的请求中,调用了parsePostForm方法,方法大致内容如下:

在这个方法中,会读取http的请求体。

在这里被读取的时候,后面又重新读取一次,之后解json

后面读到的请求体是空的,解json的时候就会报错EOF

总结:golang中http请求报错eof,多半是因为多次读取了请求体

大多数现代Web组件栈允许通过栈式/组件式中间件“过滤”请求,这样就能干净地从web应用中分离出横切关注点(译注:面向方面程序设计中的概念?)。 本周我尝试在Go语言的 http.FileServer 中植入钩子,发现实现起来十分简便,让我非常惊讶。

让我们从一个基本的文件服务器开始说起:

func main() {

http.ListenAndServe(":8080", http.FileServer(http.Dir("/tmp")))

}