注意:我修复了用户代理问题,我还添加了一个额外的字节以匹配内容长度。然而,没有运气。
我不明白这一点。我在下面运行this code,结果json字符串是链接已过期(意味着无效)。
然而,卷曲代码完全相同并且有效。我要么得到带有url的预期字符串,要么说我需要等待(几秒钟到1分钟)。
为什么呢?什么是两者的区别?它看起来非常F%^& * ed up它表现不同(它导致了我的问题)。
注意:网站要求的唯一cookie是SID(已测试)。它包含您的会话ID。第一个帖子激活它,第二个命令用返回的json字符串检查状态。如果您愿意,可以随意将CookieContainer设置为仅使用SID。
警告:您可能希望将SID更改为其他值,以便其他人不会激活它。您可能希望运行第二个网址以确保未使用会话ID,并在开始之前说明已过期/无效。
附加说明:使用curl或在浏览器中如果执行POST命令,可以将sid粘贴在.NET cookie容器中,第二个命令将起作用。但是执行第一个命令(POST数据)将不起作用。这个帖子功能我用于许多其他需要发布的网站,到目前为止它已经有效。显然检查方法是一个大问题,我看到它在执行第一个命令时确实是POST。
static void Main(string[] args)
{
var cookie = new CookieContainer();
PostData("http://uploading.com/files/get/37e36ed8/", "action=second_page&file_id=9134949&code=37e36ed8", cookie);
Thread.Sleep(4000);
var res = PostData("http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined",
null/*this makes it GET*/, cookie);
Console.WriteLine(res);
/*
curl -b "SID=37468830" -A "DUMMY_User_Aggent" -d "action=second_page&file_id=9134949&code=37e36ed8" "http://uploading.com/files/get/37e36ed8/"
curl -b "SID=37468830" -A "DUMMY_User_Aggent" "http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined"
*/
}
我厌倦了HttpWebRequest / .NET htto客户端。我是用curl做的(在学习了如何在.NET上设置并刷新自己之后)。我做得很简单,很快就完成了。没有愚蠢的问题。
Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
var curl = new Easy();
curl.SetOpt(CURLoption.CURLOPT_USERAGENT, "DUMMY_User_Aggent");
curl.SetOpt(CURLoption.CURLOPT_COOKIE, "SID=4385743");
curl.SetOpt(CURLoption.CURLOPT_POSTFIELDS, "action=second_page&file_id=9134949&code=37e36ed8");
curl.SetOpt(CURLoption.CURLOPT_URL, "http://uploading.com/files/get/37e36ed8/");
curl.Perform();
curl.SetOpt(CURLoption.CURLOPT_POST, 0);
Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData);
curl.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
curl.SetOpt(CURLoption.CURLOPT_URL, "http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined");
curl.Perform();
curl.Cleanup();
Curl.GlobalCleanup();
答案 0 :(得分:0)
尝试使用WebClient类。
它也会使你的代码更短。
答案 1 :(得分:0)
显然你正试图通过程序从upload.com下载一些东西,这是他们不希望你这样做的。
由于您没有使用cUrl发送UserAgent,因此他们无法知道您正在自动化它,但.NET可能会发送一个列入黑名单的UserAgent。