问题描述:
截图如下:
说明:为了把图片上传到指定的url下,使用了WebResponse response = (HttpWebResponse)webrequest.GetResponse()请求的方法
但是老是报错,上图为我参考的内容自己的解决方法:
测试将本地的图片以相同的方式上传到指定的url下,但老是报错,找不到错误的原因来
具体代码如下:public void UploadImageToJd(string json)
{
//转为json对象
JObject jo = (JObject)JsonConvert.DeserializeObject(json);
JArray objcookies = (JArray)jo["cookies"];
string cookies = "";
foreach (var item in objcookies)
{
if (((JObject)item)["name"].ToString() == "auname")
{
//((JObject)item)["value"] = " %E6%BD%AE%E8%AF%B4";
((JObject)item)["value"] = Uri.EscapeDataString(((JObject)item)["value"].ToString());
}
cookies += ((JObject)item)["name"] + "=" + ((JObject)item)["value"] + ";";
}
JObject prama = (JObject)jo["param"];
string time =DateTime.Now.Ticks.ToString();
string boundary = "----------" + time;
string boundary2 = "------------" + time;
string uploadUrl = "https://plat-gw.jd.com/daren/fileupload/image/cut";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
webrequest.Method =  "POST";
webrequest.Headers.Add("cookie", cookies);
webrequest.Headers.Add("origin", "https://dr.jd.com");
webrequest.Referer = "https://dr.jd.com/page/app.html";
webrequest.Accept = "application/json, text/javascript";
webrequest.Headers.Add("accept-encoding", "gzip, deflate, br");
webrequest.Headers.Add("accept-language", "zh-CN,zh;q=0.9");//data:image/jpeg;base64,
string bouny = DateTime.Now.Ticks.ToString();
webrequest.ContentType = "multipart/form-data;" + boundary;
webrequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"Filedata\"; filename=\"computer.jpg\";");
sb.Append("\r\n");
sb.Append("Content-Type: image/jpeg");
sb.Append("\r\n");
sb.Append("\r\n");
StringBuilder bs = new StringBuilder();
bs.Append("\r\n");
bs.Append("------" + boundary + "\r\n");
bs.Append("Content-Disposition: form-data; name=\"cut_x1\"\r\n");
bs.Append("0");
bs.Append("------" + boundary + "\n");
bs.Append("Content-Disposition: form-data; name=\"cut_y1\"\r\n");
bs.Append("0");
bs.Append("------" + boundary + "\n");
bs.Append("Content-Disposition: form-data; name=\"cut_width\"\r\n");
bs.Append("600");
bs.Append("------" + boundary + "\n");
bs.Append("Content-Disposition: form-data; name=\"cut_height\"\r\n");
bs.Append("600");
bs.Append("------" + boundary + "\n");
bs.Append("Content-Disposition: form-data; name=\"with_original\"\r\n");
bs.Append("0");
bs.Append("------" + boundary + "\r\n"); bs.Append("--");
bs.Append(boundary + "--");
string postHeader = sb.ToString();
string postEnder = bs.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
byte[] boundaryBytes = Encoding.ASCII.GetBytes(postEnder);
byte[] buffer = ImageToByte();// GetByteImage(inputStr);
long length = postHeaderBytes.Length + boundaryBytes.Length + buffer.Length;
webrequest.ContentLength = length;
Stream requestStream = webrequest.GetRequestStream();
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
string ReqResult = "";
try
{
WebResponse response = (HttpWebResponse)webrequest.GetResponse();
StreamReader sr = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress), System.Text.Encoding.UTF8);//实例华一个流的读写器
ReqResult = sr.ReadToEnd();
response.Close();
}catch(WebException ex)
{
WebResponse res = (HttpWebResponse)ex.Response;
}
requestStream.Close();
Response.Write(ReqResult);
Response.End();
}private static byte[] ImageToByte()
        {
            //获取当前程序运行路径
            string path = "D:\\computer.jpg";
            //初始化类
            Bitmap bmp = new Bitmap(Image.FromFile(path));
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            ms.Flush();
            //将二进制数据存到byte数字中
            byte[] bmpBytes = ms.ToArray();
            return bmpBytes;
        }

解决方案 »

  1.   


    详细的堆栈信息要全部打印出来啊。
    Response.Write(ex.ToString());
      

  2.   

    {*************************************** 
     异常发生时间: 2018/7/27 14:18:30 
     异常类型: -2146233079 
     导致当前异常的 Exception 实例:  
     导致异常的应用程序或对象的名称: System 
     引发异常的方法: System.Net.WebResponse GetResponse() 
     异常堆栈信息:    在 System.Net.HttpWebRequest.GetResponse()
       在 NFine.Web.AjaxHandler.JdHandler.UploadImageToJd(String json) 位置 D:\Codes\ArticleWeb\project\NFine.Web\AjaxHandler\JdHandler.ashx.cs:行号 557 
     异常消息: 远程服务器返回错误: (500) 内部服务器错误。 
    }