目前正在尝试创建一个分段上传请求来上传 png 以及一些额外的正文参数。服务器正在返回响应:
请求正文未包含指定的字节数。已获得 142,827,预计 146,836
很明显计算出了问题。我一生都无法弄清楚如何实际手动计算请求的正文和文件的内容长度。请参阅下面我的发送请求的代码:
func signUp(email, username, password, profilePath string) account {
session := createClient()
capToke := captchaToken(session)
solved := solveCaptcha(capToke, "example.com")
if solved == failed {
panic("Solve Failed")
}
extraParams := map[string]string{
"Username": username,
"Age": string(random(18, 21)),
"Gender": "1",
"EmailAddress": email,
"Password": password,
"ConfirmPassword": password,
"g-recaptcha-response": solved,
"Recaptcha": "",
"ReceiveNewsletter": "false",
}
req, err := makeFileUploadRequest("https://example.com", extraParams, "ProfileImage", profilePath)
if err != nil {
panic(err)
}
req.Header.Set("Host", "example.com")
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) …Run Code Online (Sandbox Code Playgroud) multipartform-data multipart go http-content-length content-length
我需要重新编写从js到c#的东西,利用js中的btoa方法对一串unicode字符进行转换,将它们转换为base64.但是,据我所知,javascrpt使用的编码与c#中可用的编码不同.我需要编码完全相同,并且不会在这些语言中返回不同的值.我已经尝试设置一个nodejs服务器并向它发出get请求,以便以这种方式运行编码,但这太慢而且不稳定.我的印象是我需要创建自己的编码表,但我不知道从哪里开始或如何实现它.如果有人可以提供帮助,那将非常感激.
tl; dr:javascript的btoa返回的值不同于c#中的base 64编码.我需要它是相同的价值观.
代码和输出:
c#:
String fromChar = new
String(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(fromChar);
Console.WriteLine(System.Convert.ToBase64String(plainTextBytes));
output = w7dHwroIfUgCAQA=
javascript:
var x = btoa(String.fromCharCode(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
console.log(x)
output =
90e6CH1IAgEA
Run Code Online (Sandbox Code Playgroud)
我知道前一个例子使用utf8编码,而js没有,问题是.net中没有与javascript编码匹配的编码.
编辑:试图比较c#和javascript的字节数组,但问题是btoa函数使用了一个未命名的编码,所以我实际上无法获得字节来打印它的字节数组而不假设它是像utf8那样的不是.
我有一个向端点发出的请求,但由于某种原因,响应正文仅包含响应的最后一行(整个响应在 fiddler 中捕获)。如果我使用 requests 模块在 python 中重新创建请求,也会发生同样的事情。但是,我注意到如果我在 python 中获取整个原始响应,我能够看到所有行(由多个 分隔\r)。我想知道是否可以像response.raw.datapython 中的方法一样查看 go 中的整个原始响应。换句话说,有没有一种方法可以查看整个文本响应,而不是切断除最后一行之外的所有内容?如果有人知道为什么最后一行被切断,我们也会非常感激。
澄清一下,这只发生在这个单一端点上,我怀疑\r响应正文中的 s 可能是罪魁祸首,但我不确定。我还没有从任何其他 http 响应中看到这种行为。
编辑:这是我用来查看响应的代码
bodyB, _ := ioutil.ReadAll(resp.Body)
bodyStr := string(bodyB)
Run Code Online (Sandbox Code Playgroud)