【发布时间】: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 分钟后重试。