Imported and modified evcli's api client code
This commit is contained in:
parent
64ac1f44e0
commit
6844355a92
11 changed files with 523 additions and 5 deletions
42
external/evcli/url.go
vendored
Normal file
42
external/evcli/url.go
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
package evcli
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// The url package has an extremely confusing interface. One could believe
|
||||
// setting RawPath is enough for it to be used during encoding, but this is
|
||||
// not the case. Instead, *both* must be set, and (*url.URL).EscapedPath will
|
||||
// check that RawPath is a valid encoding of RawPath. If this is not the case,
|
||||
// RawPath will be ignored.
|
||||
//
|
||||
// In most cases, the problem is not apparent. But if the path contains
|
||||
// segments with slash or space characters, it is almost guaranteed to misuse
|
||||
// Path and RawPath and double-encode these characters.
|
||||
//
|
||||
// The problem was signaled years ago on
|
||||
// https://github.com/golang/go/issues/17340 but was of course ignored and
|
||||
// buried.
|
||||
//
|
||||
// As usual with standard library issues, the only thing we can do is add
|
||||
// utils to work around it.
|
||||
|
||||
func NewURL(pathSegments ...string) *url.URL {
|
||||
var buf bytes.Buffer
|
||||
buf.WriteByte('/')
|
||||
for i, s := range pathSegments {
|
||||
if i > 0 {
|
||||
buf.WriteByte('/')
|
||||
}
|
||||
buf.WriteString(url.PathEscape(s))
|
||||
}
|
||||
rawPath := buf.String()
|
||||
|
||||
path, _ := url.PathUnescape(rawPath)
|
||||
|
||||
return &url.URL{
|
||||
Path: path,
|
||||
RawPath: rawPath,
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue