Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用libcurl发送POST请求_C#_.net_Curl_Libcurl - Fatal编程技术网

C# 使用libcurl发送POST请求

C# 使用libcurl发送POST请求,c#,.net,curl,libcurl,C#,.net,Curl,Libcurl,在使用PHP和发送POST请求时,我是这样做的: $ch = curl_init(POSTURL); curl_setopt($ch, CURLOPT_POST ,1); curl_setopt($ch, CURLOPT_POSTFIELDS , 'whatever'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); $Rec_D

在使用PHP和发送POST请求时,我是这样做的:

 $ch = curl_init(POSTURL);
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_POSTFIELDS    , 'whatever');
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1); 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
 $Rec_Data = curl_exec($ch);
现在我想在C#中使用CURL。我找到了“libcurl”,但我不知道怎么做。我在网上找到了一些代码片段,但它们并没有真正的帮助

那么我如何将PHP代码翻译成C#


非常感谢。

以下是如何使用LibCurlNet的示例

using System;
using SeasideResearch.LibCurlNet;

namespace Sample
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);

            Easy easy = new Easy();
            Easy.WriteFunction wf = MyWriteFunction;
            easy.SetOpt(CURLoption.CURLOPT_URL, "http://google.com/index.html");
            easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
            easy.Perform();
            easy.Cleanup();
            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }

        private static int MyWriteFunction(byte[] buf, int size, int nmemb, Object extraData)
        {
            foreach (byte b in buf)
                Console.Write((char)b);

            return buf.Length;
        }
    }
}

有关更多示例,请在stackoverflow中搜索libcurl。[libcurl]标记下有大量代码片段在这里漫游。希望这有帮助。

为什么不能使用WebClient、WebRequest或HttpWebRequest?它们对于HTTP调用(包括所有restful动词)来说已经足够了

CurlSharp可用于Win32和Win64,以及Linux和OSX(Mono)


免责声明:我是上述库的作者。

好的,这似乎很好。但有一个小问题:CURLOPT_RETURNTRANSFER不存在。所以我可以发送请求,但是我没有得到请求的“结果”:当我查看示例时,我注意到Easy.WriteFunction类似乎正在注册回调函数。我想这就是你需要得到的结果<代码>Easy.WriteFunction wf=新建Easy.WriteFunction(OnWriteData)
easy.SetOpt(curlpoption.CURLOPT_WRITEFUNCTION,wf)我也知道了,但结果如何?我尝试了类似CURLcode=easy.Perform();,但是cCode中没有什么有趣的东西。结果还会是什么呢?(顺便说一句,谢谢你的帮助)真是令人挠头的时刻!我想我应该下载LibCurl并执行一个示例代码:)--检查。希望我能在30分钟内解决这个问题。之后需要回到办公室工作。好的,我已经运行了上面的libcurl代码,我可以在控制台上看到从google的Web服务器返回的响应(通过回调函数)。如果这个方法不起作用,那么请发布您的代码实现,看看发生了什么。正如@jacko下面所说的,您为什么不使用WebClient?是什么让你需要libcurl?使用libcurl的速度大约是webclient或httpclient的2.5倍。我想这可能是因为他来自PHP世界,在使用他习惯的组件时感觉更舒服:)我理解,但反过来说,如果有内置的PHP库来处理这个问题,我不建议有人使用托管的.NETDLL进入PHP世界。了解你正在使用的框架。同意,但这是另一个讨论。起初我倾向于回答同样的问题,但这并不能回答OP的问题。正确的答案就是正确的答案,无论OP是否在寻找……)
using System;
using CurlSharp;

internal class EasyGet
{
    public static void Main(String[] args)
    {
        Curl.GlobalInit(CurlInitFlag.All);

        try
        {
            using (var easy = new CurlEasy())
            {
                easy.Url = "http://www.google.com/";
                easy.WriteFunction = OnWriteData;
                easy.Perform();
            }
        }
        finally
        {
            Curl.GlobalCleanup();
        }   
    }

    public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)
    {
        Console.Write(Encoding.UTF8.GetString(buf));
        return size*nmemb;
    }
}