我有一个应用程序,我的应用程序使用的客户端浏览器和第三者之间没有中介。 然后我要创建一个网桥,客户端必须点击我的应用程序,然后它将由我的应用程序转发给第三方,并且来自第三方的响应结果将转发给客户端浏览器。
存在:client <-> 3rd party
期望:client <-> myapp <-> 3rd party
问题在于,我对Go并不熟悉,因此我无法编写代码来接收和发送二进制数据。 (来自第三方的响应也是数据二进制的) 这是我尝试过的代码:
func getData(r *http.Request, url string, clientID string) (string, error) {
buf, err := ioutil.ReadAll(r.Body)
if err != nil {
spew.Dump(err)
}
spew.Dump(buf) // returned empty string
body := strings.NewReader(string(buf))
req, err := http.NewRequest("POST", url, body)
if err != nil {
return "", err
}
req.Header.Set("User-Agent", r.Header.Get("User-Agent"))
req.Header.Set("Referer", r.Header.Get("Referer"))
req.Header.Set("Origin", r.Header.Get("Origin"))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
query := req.URL.Query()
query.Add("clientID", clientID)
req.URL.RawQuery = query.Encode()
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
return string(respBody), nil
}
从Chrome导出了Curl代码:
curl 'https://3rdparty.example.com:8063/?clientID=XYZ' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36' -H 'Referer: https://myapp.example.com/?p=1' -H 'Origin: https://myapp.example.com' --data-binary $'\u08\u01\u12þ\u0b\n\u87\u0b\u08\u01\u12ì\u09\n¯\u02\u08\u02\u12\u11ûâK\u06\u86\u16\u05Üë\u8a\u0b¦N£³\u07\n\u18å\u8c×æ\u05"\u8e\u020\u82\u01\n\u02\u82\u01\u01\u00\u8f¼8ª\u8d΢¡Qq±ü\u15Peh§Îé\u04\u16|}´[\u1d>\u88ëÞMµ0\u9fÁ\u01Qª\u83Ë(\u98çQ³òß\u8fT\u06~\u17\u021ÔÛéý-x|ùÀ\u1dkæ×»wÔ$¾\'Kk\u00\u93,<\u81s\u13\u82d3Nõ\u07¹<<6¿]}Ýè\u848x\u8a0ü\u89ÙÝX«C\u10n¿r\u11 wï\u06Vhß,x\u02y2\u9aL9óo`ö\u08\u072\u88\u1f\u81Æá\u1dRU߸£qÚq¨X\u0bÑqÓZ¸ak\u0cÎýk[ë½8¾\u86Ò×ࢪàò\u8f\r1R\u7f5¼\u02k°\u85£x\u8fe¦§`\u8fßÅ\u8b\u11\u86²¡\u09ds\u13\u08\u8fÁKb{\u1eåÖ/eòæ;y\u8c\u0fo\u07\u94\u7fT¸\u9cÏN:¾\u04\u14P*\\½Ml~ë\u1c1°e\u02Y¯·\u02\u03\u01\u00\u01(\u83k\u12\u80\u02)\u1d\u81\u18±dx\u18$v´Ò\u1e(y¬â»\rÝãä\u98`VDG£Y\'ê\u1c¤þÉ\u21zs½o¬4öªEºEÎt43Ø7\u8bubök\u80\u92}\u87"æ³\u92Ó\u02ÍïeÌH\u1e\u0e¥É\u83Ì\u88`\u9c\u97Án7ÅåЮ\u85\u96\u8b\u8a¢\u16H\u03\u86E\u0b\u82_ûuM\u90\u8aN}ß\u0f\u91\u88tw\u81i«\u9bj\u97ð\u02\u00\u81e\u9dG\u9b¡9güX%§\u01¼\u98Ór@ÈÔ¹¹\u21\u10\u0fxalØo«Clu\u8fÈÆÆô\u12·Â\u14\u07Õ9^4|\rHóCï\u83ôY\u16¡W\u01\u07ÕaHÒg\u8fÔcýÄ\u17×ÇÉÆ\u84\n)þ\u09¡f°O\u98\u10Ú\u89v]¼ñç^zë<"çâhÆ\u01Ñ9×1JÐ~)UgÈÍË\u05\u88i\u80\u99ÍM5#@U\u1a´\u05\n®\u02\u08\u01\u12\u10Ùé\u9fIߧ\u82X\u8bj\u92}C6u \u18ÆÀää\u05"\u8e\u020\u82\u01\n\u02\u82\u01\u01\u00ÄL§\u84µ<ÆǪ¯\u0e\u15\u02yâ\u93©5õy¦\u99¾rx\u1f2± N\u91áµc\u93D\u82t\u9fW½Ç)Ý\u84Gî\u8b\u1b%\u00C#_Û9¨¿k\u879h\u9b"ýùæg2^Ý\u16^\u82дã"2Ï\u06ªvÔø·\u82«\u11«CfÚ\u8eIsEÖÀNÆ\u9anÕ\u0f4ÌÕ»>ï|~(\u18þ\u8fÓÒ¤\u97û1Æø\u115úePÿý¼1>ë\u9aÞ¾\u8c)Êë \róË«\u94\u99lé\u97è\u07£B 9\u89§\u97GuÜ\u7f\u02Å,\u8bT\u8dÁ0õbhû,â7PEvá+l?\u90uýð¿o\u16\\Ǥ`a\u9bSÙS°]×Ôd\u98\u92]]=çWZò48ú\u08§\u03ÀIª\u19±µ. \u17mÅ\u98\u16\u83f\u06°§o,`\u7fyg»ó\u02\u03\u01\u00\u01(\u83k\u12\u80\u03\u96ÈÉæ^\u8auù\u82¡"\u04ä"#\u93Ì\u1dÕ\u13C¨p(ðÍ\u0f¹¹¬\u84Á\u98Çâ\u83\u91³ïo±.\u0b\u8eÊ\u8b\u85Pg6Ú\u95\u87±·fWÑ\u0b§å\u9f@#mÎì\u06\u14&Û\u8bPúÄ%²c½¯Æª©Í5Ùï\u9dKÖûïã\u8a\u1f\u92fÒ¸@\u1165æ¼Þ\u11\u95É,L\u0f\u8eúåVÐ\u05Þ\u96¾\u9b\u99´4\ní\u15\u1d\u80\u85,\u00ëR,ÜE\u8aÚ\u0bØcU#\u97¦çÈT;{\u04g÷LÆ\u0cv\u194\u11ÿ\u88\u9fæÝÀ¸\u9bWYEÑÒ\u980DiÚÌ;HÁþ\u18T7ª¦ hKºw\u1eY\u13Ô\u12ä%@\u81DÁ-l\u02Ó\u1f/1ÿY\u90ut\u9c\u09JY_ ÝXí\u08ó\u1f\u90\u08V|>>÷¥9wÝ5Òh@»\u17îïý¨\u15j¸&\u89uµGA\u9aZ¿¾U\u8a{\u1et{\u1e\u8e»É©ÿÝî-gò\u0cÔÅ,\u0f¢¡¿þ9d¹\u18ÛÝÞ:©æ:\u96\u88î\u00Ëò¶Üt`\u10Ó ¦õ\'xmÙw\u9d»G\u0eø\u16¨ j¯.Q\u1a<%ùù`¼\u21ø\u861]\u88Ö[\u1a\u96\u1b\u9d\u0f\u14Nv>ý\u09Dþä¨7ìsvÓÊ?Dã4\u1a\u09BÄ÷¯j\u93\u1a\u1b\n\u11architecture_name\u12\u06x86-64\u1a\u16\n\u0ccompany_name\u12\u06Google\u1a\u17\n\nmodel_name\u12\u09ChromeCDM\u1a\u16\n\rplatform_name\u12\u05Linux\u1a$\n\u14widevine_cdm_version\u12\u0c4.10.1440.182\u08\u08\u00\u10\u00\u18\u01 \u00\u12h\nf\nP\u08\u01\u12\u10\u86U·Úç\u9b\u9aI¼\u02ТAY%\u1c\u1a\u17verimatrixptglobalmedia"\u1ar=TEST-001-SG-VCAS&s=23216*\u05SD_HD\u10\u01\u1a\u10\u97SðT{$<\u88X\u99ÓY"\u12\u05Y\u18\u01 ªð±è\u050\u15\u1a\u80\u02\u8eý\u81ë%õB\u93îÜ¥ qú6¹¸\u00ô§ÚiÉI\nU\u0cd]cM\u84\u96\u998h½Ýj%\u8bBâX)\u21\u9cß\'Q\u9f$N\u16>-\u02¸ýÿ\u8Ho\u1f&5ÿáÅäfû\u12V¤:Ø\u18\u98É-s\u9eÆ\u82\u84+,#÷VÝlnÇ\u9bùÕ\u0c\u9f;Ë\u91à\u19a\u96å\u1ep\u14mqª"ã\u0b\u09&çÌ\u0eïª\u94\u03\u86\u85Ö½¤ê\u9c,\u18\u1a[¡Àe\u09¡õ¥ÛÊîñû+\u16S¦ÄûlàÌ\u1aªö\u19«/\u86u¾Í-;xÌ3\u15\u88µ\u0e\u19°Ä¾Kf%C¢X\u06\u0c¢\u89\u80Ñ¢\u9aݤýÌ\u80%®Ã«\u0bPíu¨\u09¤×%>uÉ\u9ah\u80\u81Èùz\u08ß>F2\u9fOïæÌñ©eâx¸\u89\u07\u10ç\u9c\u86XG0ºó' --compressed
对不起,我的英语
预先感谢