我创建了一个反向代理,如下所示:
func ProxyFunc(w http.ResponseWriter, r *http.Request) {
u, err := url.Parse("http://mynetworkserverhere:8957/some/path/here/")
if err == nil {
proxy := httputil.NewSingleHostReverseProxy(u)
proxy.ServeHTTP(w, r)
//????
} else {
w.Write([]byte(err.Error()))
}
}
并从main调用它:
func main() {
log.Printf("Starting...")
http.HandleFunc("/", ProxyFunc)
log.Fatal(http.ListenAndServe(":6060", nil))
}
它在客户端可以正常工作,但是我想阅读代理的响应,我怎么做?
net/http包非常灵活。您可以将ReverseProxy的默认传输替换为您自己的传输,它只使用DefaultTransport。然后你可以截取往返电话,做任何你想做的事。
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
log.Printf("Starting...")
http.HandleFunc("/", someFunc)
log.Fatal(http.ListenAndServe(":6060", nil))
}
func someFunc(w http.ResponseWriter, r *http.Request) {
// change the request host to match the target
r.Host = "you.host.here:port"
u, _ := url.Parse("http://you.host.here:port/some/path/")
proxy := httputil.NewSingleHostReverseProxy(u)
// You can optionally capture/wrap the transport if that's necessary (for
// instance, if the transport has been replaced by middleware). Example:
// proxy.Transport = &myTransport{proxy.Transport}
proxy.Transport = &myTransport{}
proxy.ServeHTTP(w, r)
}
type myTransport struct {
// Uncomment this if you want to capture the transport
// CapturedTransport http.RoundTripper
}
func (t *myTransport) RoundTrip(request *http.Request) (*http.Response, error) {
response, err := http.DefaultTransport.RoundTrip(request)
// or, if you captured the transport
// response, err := t.CapturedTransport.RoundTrip(request)
// The httputil package provides a DumpResponse() func that will copy the
// contents of the body into a []byte and return it. It also wraps it in an
// ioutil.NopCloser and sets up the response to be passed on to the client.
body, err := httputil.DumpResponse(response, true)
if err != nil {
// copying the response body did not work
return nil, err
}
// You may want to check the Content-Type header to decide how to deal with
// the body. In this case, we're assuming it's text.
log.Print(string(body))
return response, err
}
问题内容: 我在andorid中制作了一些代理服务器来修改http标头,它可以正常工作,但是我必须将完整的响应转发到“顶层”。 如何从HttpURLConnection读取整个响应(所有标头,内容,所有内容)? 在getInputStream中,我仅收到内容,是否有可能包含某些内容? 问题答案: 无法直接使用来转储完整的HTTP响应,但是您可以使用其各种方法来重构它。例如, 版画 然后,您可以获取
问题内容: 我有两个Python脚本。一种使用Urllib2库,另一种使用Requests库。 我发现请求更容易实现,但是找不到urlib2的等效函数。例如: 建立完发布网址后,请给我内容-我正尝试连接到vcloud Director api实例,并且响应显示了我有权访问的端点。但是,如果我按以下方式使用请求库.... .... the和不返回任何内容,即使请求后调用中的状态代码等于200。 为什
问题内容: 我正在使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串,我还需要响应头中的信息。有什么办法可以做到这一点? 问题答案: 好吧,我终于明白了。交换方法正是我所需要的。它返回包含完整标头的HttpEntity。
Axios 0.17.1 响应的console.log为 {data:“{”error“:”name必须输入多个…null [“ispipe”:protected]=>null}}“,状态:203,statustext:”非权威信息“,标题:{…},配置:{…},…}配置:{adapter:f,转换请求:{…},转换响应:{…},超时:0,xsrfcookiename:”xsrf-token“,…
我收到了以下回复:HTTP/1.1 200确定日期:2016年4月11日星期一10:36:10 GMT内容处置:附件;filename=结果。xml;x-xss-防护:1;mode=access Keep Alive:timeout=5,max=100我想从头文件中读取文件名,如何使用正则表达式捕获这个值?
如何从改造和存储到java类并访问某个地方来读取此响应??