为什么.NETPOST与CURL不同?破碎的

为什么.NETPOST与CURL不同?破碎的,.net,post,curl,httpwebrequest,.net,Post,Curl,Httpwebrequest,注意:我修复了用户代理问题,还添加了一个额外的字节以匹配内容长度。但是运气不好 我不明白。我在下面运行了json字符串,结果是链接已过期,这意味着无效 然而,curl代码做了完全相同的事情,并且工作正常。我要么得到带有url的预期字符串,要么它说我需要等待几秒钟到1分钟 为什么??这两者有什么区别?它的表现很不一样,这给我带来了好几个小时的麻烦 Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); var curl

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

我不明白。我在下面运行了json字符串,结果是链接已过期,这意味着无效

然而,curl代码做了完全相同的事情,并且工作正常。我要么得到带有url的预期字符串,要么它说我需要等待几秒钟到1分钟

为什么??这两者有什么区别?它的表现很不一样,这给我带来了好几个小时的麻烦

        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();
注意:站点所需的唯一cookie是经过SID测试的。它保存会话id。第一个post激活它,第二个命令使用返回的json字符串检查状态。如果愿意,可以将CookieContainer设置为仅使用SID

警告:您可能希望将SID更改为其他值,以便其他人不会激活它。您可能希望运行第二个url,以确保会话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客户端。在学习了如何在.NET上设置并刷新自己之后,我使用了curl。我做得简单而迅速,效果很好。没有愚蠢的问题

        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();

尝试使用WebClient类


这也会使您的代码更短。

尝试使用WebClient类


这也会使你的代码更短。

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

显然,您正在尝试使用程序从Upload.com下载某些内容,这是他们不希望您这样做的。

由于您没有发送带有cUrl的UserAgent,因此他们无法知道您正在自动化它,但是.NET可能会发送一个被列入黑名单的UserAgent。

您是否尝试过将请求发送到您自己的服务器并打印结果/使用wireshark/ethereal/network analyzer之类的工具?我很好奇4秒延迟的目的,以及这是否会导致问题。@tstenner:我通过一个输出结果的虚拟页面运行了它标题。我注意到两件事,内容长度是+1加上CURL,我猜它包括null,即使我设置了它,用户代理也没有出现。这是一个很大的WTFDid,如果您尝试同时向自己的服务器发送请求并打印结果/使用wireshark/ethereal/network analyzer之类的工具?我很好奇4秒延迟的目的,以及这是否会导致问题。@tstenner:我通过一个输出标题的虚拟页面运行了它。我注意到两件事,内容长度是+1加上CURL,我猜它包括null,即使我设置了它,用户代理也没有出现。这是一个大问题。我如何设置帖子数据和cookies?帖子是通过所有上传*方法自动完成的,比如UploadString,action=second\u page&file\u id=9134949&code=37E36ED8这很好。我可以做饼干吗?bc我在两个函数中都需要它。如果可以的话,我会一直使用这个。不过,一个小包装可以解决这个问题,但这和我已经拥有的函数差不多。很高兴知道如何设置POST数据和Cookie?POST是通过所有上传*方法自动完成的,如UploadString、action=second\u page&file\u id=9134949&code=37E36ED8这很好。我可以做饼干吗?bc我在两个函数中都需要它。如果可以的话,我会一直使用这个。不过,一个小包装可以解决这个问题,但这和我已经拥有的函数差不多。很高兴知道tho=我解决了用户代理问题。如果他们不想让我下载有问题的东西,那么他们很可能会把他们没有做过的事情列入黑名单。成功了。我解决了用户代理问题。如果他们不想让我下载有问题的东西,那么他们很可能会把他们没有做过的事情列入黑名单。成功了。那么,什么给了我们。