为什么.NET Post与CURL不同?破碎?

时间:2010-04-22 14:25:06

标签: .net post curl httpwebrequest

注意:我修复了用户代理问题,我还添加了一个额外的字节以匹配内容长度。然而,没有运气。

我不明白这一点。我在下面运行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();

2 个答案:

答案 0 :(得分:0)

尝试使用WebClient类。

它也会使你的代码更短。

答案 1 :(得分:0)

显然你正试图通过程序从upload.com下载一些东西,这是他们不希望你这样做的。
由于您没有使用cUrl发送UserAgent,因此他们无法知道您正在自动化它,但.NET可能会发送一个列入黑名单的UserAgent。