【问题标题】:Webclient upload file - internal server error 500Webclient 上传文件 - 内部服务器错误 500
【发布时间】:2017-08-17 11:34:11
【问题描述】:

我一直在尝试通过以下 C# 代码模拟以下 cURL 命令:

curl.exe –v –u user:pwd –XPOST –T "file1.txt" –H "Content-Type:text/plain" "http://example.com/xx/xx/xx/insert"
string url = "http://example.com/xx/xx/xx/insert";
string fileName = @"file1.txt";

var client = new WebClient();
client.Credentials = new NetworkCredential("user", "pwd");
client.Headers.Add("Content-Type", "text/plain");         
byte[] responseBinary = client.UploadFile(url, "POST", fileName);
string response = Encoding.UTF8.GetString(responseBinary);

它给了我一个“内部服务器错误 500”。我认为我要上传到的服务器是 PHP 服务器。我应该如何进行调试?

【问题讨论】:

  • 您可能需要转到服务器并查看您得到的实际异常。这是一个控制台应用程序吗?确保将 file1.txt 添加为“CopyAlways”资源。如果是网站,则默认文件夹 windows 查找文件位于 Windows 目录中。所以你可能需要一个 Request.MapPath 或类似的。
  • @flaviotsf :我正在尝试从控制台应用程序上传到服务器。所以你的意思是除了将file1.txt设置为“CopyAlways”之外,我还需要查看php服务器代码来弄清楚发生了什么?
  • 是的,该文件应该在您的应用程序的同一目录中。除此之外,您的代码看起来不错!也许您需要在 NetworkCredential 构造函数上传递一个域? CURL 命令有效吗?如果是这样,您始终可以使用 system.diagnostics.process 调用它
  • @flaviotsf:谢谢。 System.diagnostics.process 解决了这个问题。我只有一个问题是,使用 System.diagnostics.process 我可能无法控制错误...这正是 cURL 返回的内容?
  • 是的..现在你得到了 500 分,这也无济于事。我不确定 curl 是如何工作的,但您也许可以检查进程的退出代码。通常 0 是成功,1 是错误。也许您可以让 log4net 向您发送电子邮件以防出现异常或在 5 分钟后重试。

标签: c# curl


【解决方案1】:

更新:

我正在通过 fiddler 调试 cURL 和 webclient(控制台应用程序)的流量。看起来 cURL 只发送 file1.txt 的内容并将标题保持为“text/plain”。 webclient 将 Content-Disposition、filename、content-type 添加到 file1.txt 的内容中,并将 headers 设置为“multipart/form-data”。

有没有办法阻止 webclient 的这种行为?

谢谢, 卡努

【讨论】:

  • 更新:使用 webrequest link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多