Coder Social home page Coder Social logo

Comments (8)

guonaihong avatar guonaihong commented on June 8, 2024

from gout.

guonaihong avatar guonaihong commented on June 8, 2024

我理了下这个功能是可以实现(简单魔改下url.Encode函数)。有点好奇,SetQuery现在给出的值是按字典序排序过的。按道理服务端,无论是正常解析比如gin之类的框架还是参数签名,都可以正常解析。是什么特殊的需求吗?

from gout.

tangtanglove avatar tangtanglove commented on June 8, 2024

如果SetQuery传入的是map,肯定顺序会打乱的;map是无序的,建议增加键值对的传入方法;还有一个bug是SetHeader传入Struct,tag标记不会生效

from gout.

guonaihong avatar guonaihong commented on June 8, 2024

如果SetQuery传入的是map,肯定顺序会打乱的;map是无序的,建议增加键值对的传入方法;还有一个bug是SetHeader传入Struct,tag标记不会生效

SetQuery下面是用的url.Values类型编码成query string.
image
从源代码可以看出是会排序的。所以比较好奇乱序的使用代码。
我用nc 模拟服务端
nc -l 8080
使用gout的客户端代码使用map传参

package main

import "github.com/guonaihong/gout"

type testQuery struct {
	C string `query:"c"`
	B string `query:"b"`
	A string `query:"a"`
}

func main() {
	var err error
	err = gout.GET(":8080").Debug(true).SetQuery(gout.H{"3": "3", "5": "5", "9": "9", "8": "8"}).Do()
	if err != nil {
		// 为了方便测试,直接panic
		panic(err)
	}

	err = gout.GET(":1234").Debug(true).SetQuery(testQuery{C: "c", B: "B", A: "A"}).Do()
	if err != nil {
		// 为了方便测试,直接panic
		panic(err)
	}
}

几次执行gout代码都是按字典序给出结果。
image

from gout.

guonaihong avatar guonaihong commented on June 8, 2024

从我发的截图可以证实,无论是map还是struct还是slice编码之后的query string都是按字典序给出的。
你刚刚提的header tag不生效我确认下。

from gout.

guonaihong avatar guonaihong commented on June 8, 2024

SetHeader只有一种情况不会生效,这个header的field不符合rfc的规定,如果要所见即所得的设置header。可以使用SetHeaderRaw这个接口。

package main

import "github.com/guonaihong/gout"

type Header struct {
	Header1 string `header:"header1"`
	Header2 string `header:"header2"`
}

func main() {
	var err error
	err = gout.GET(":8080").SetHeaderRaw(Header{Header1: "aa", Header2: "bb"}).Do()
	if err != nil {
		panic(err)
	}
}

from gout.

tangtanglove avatar tangtanglove commented on June 8, 2024

header的问题解决了;但是query重排序的问题最好也处理一下,可以让用户自行抉择是否需要重新排序

from gout.

guonaihong avatar guonaihong commented on June 8, 2024

可以我这个版本出个SetQueryRaw接口。

from gout.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.