Comments (19)
@hieple I stand corrected, ContentType
is applicable only to the response from web server.
I could not find any easy way to set the content-type header on the request.
You'll need to construct the HTTP header manually:
var headers = new CurlSlist();
headers.Append("Content-Type: application/soap+xml; charset=utf-8");
easy.HttpHeader = headers;
from curlsharp.
Are you running Windows or Mono Linux/OSX? All the examples you've mentioned are working fine on my end. (Windows 8.1 x64).
Make sure to copy the appropriate DLL for the environment (32/64 bit).
To avoid further confusion, re-target the projects from "Any CPU" to the specific architecture of your choice.
from curlsharp.
Run on a Windows 2008 Standard R2 - 64 bit and Mono 3.8
GET method, a proxy for these systems work.
The POST method does not send data to the program itself starts, but does not send.
Built in this way
Download> https://github.com/masroore/CurlSharp>
Open project> CurlSharp> Debug> MixedPlatforms> Bulid Solutions
1> ------ Build started: Project: CurlSharp, Configuration: Debug Any CPU ------
1> CurlSharp -> C:\Users\Administrator\Downloads\CurlSharp-master(1)\CurlSharp-master\CurlSharp\bin\Debug\CurlSharp.dll
I run the test program, and download the code works. POST does not work send in the 32 Bit and 64 Bit
If possible, ask me about posting your CurlSharp.dll 64 bit that works well for you.
Sorry for English writing by the translator
from curlsharp.
Hi.
I have similar problem with POST method. I wasn't able to send any data using CURLSHARP. My environment is Win 7 64 bit - compile via "Any CPU" and "x64".
This is my complete C# cod (I've change domain only):
using CurlSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program { static void Main(string[] args) { int bits = IntPtr.Size * 8; Console.WriteLine("Test curl {0} bit", bits); Curl.GlobalInit(CurlInitFlag.All); Console.WriteLine("Curl Version: {0}\n", Curl.Version); try { Console.WriteLine("\n========== TEST 1 CurlEasy Post ============"); using (var easy = new CurlEasy()) { easy.WriteFunction = OnWriteData; easy.WriteData = null; easy.PostFields = "parm1=value1&parm2=value2"; easy.UserAgent = "MyUserAgent CurlEasy Post"; easy.FollowLocation = true; easy.Url = "http://xxxxx.com/testpost.php"; easy.Post = true; var code = easy.Perform(); } Console.WriteLine("\n========== TEST 2 CurlEasy HttpPost ============"); var mf = new CurlHttpMultiPartForm(); mf.AddSection(CurlFormOption.CopyName, "parm1", CurlFormOption.CopyContents, "value1", CurlFormOption.End); mf.AddSection(CurlFormOption.CopyName, "parm2", CurlFormOption.CopyContents, "value2", CurlFormOption.End); using (var easy = new CurlEasy()) { easy.WriteFunction = OnWriteData; easy.WriteData = null; easy.UserAgent = "MyUserAgent CurlEasy HttpPost"; easy.FollowLocation = true; easy.Url = "http://xxxxx.com/testpost.php"; easy.HttpPost = mf; var code = easy.Perform(); } Curl.GlobalCleanup(); } catch (Exception ex) { Console.WriteLine(ex); } Console.WriteLine("\n========== TEST 3 HttpWebRequest ============"); var request = (HttpWebRequest)WebRequest.Create("http://xxxxx.com/testpost.php"); var data = Encoding.ASCII.GetBytes("parm1=value1&parm2=value2"); request.UserAgent = "MyUserAgent HttpWebRequest"; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); Console.WriteLine(responseString); Console.ReadLine(); } public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) { Console.Write(Encoding.UTF8.GetString(buf)); return size * nmemb; } public static Int32 OnHeaderData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) { var userData = (string)extraData; Console.Write("->"+Encoding.UTF8.GetString(buf)); return size * nmemb; } public static void OnDebug(CurlInfoType infoType, String msg, Object extraData) { // print out received data only if (infoType == CurlInfoType.DataIn) Console.WriteLine(msg); } public static void Testowuec() { } }
}
And here are the results:
Test curl 64 bit
Curl Version: libcurl/7.23.1 OpenSSL/1.0.1e zlib/1.2.8========== TEST 1 CurlEasy Post ============
Array
(
)
User-Agent: MyUserAgent CurlEasy Post
Host: xxxxx.com
Accept: /
Content-Length: 1
Content-Type: application/x-www-form-urlencoded========== TEST 2 CurlEasy HttpPost ============
Array
(
)
User-Agent: MyUserAgent CurlEasy HttpPost
Host: xxxxx.com
Accept: /
Content-Length: 0========== TEST 3 HttpWebRequest ============
Array
(
[parm1] => value1
[parm2] => value2
)
User-Agent: MyUserAgent HttpWebRequest
Content-Type: application/x-www-form-urlencoded
Host: xxxxx.com
Content-Length: 25
Expect: 100-continue
Connection: Keep-Alive
The POST receiver:
$value) { echo "$header: $value\n"; } ?>
As you can see only HttpWebRequest (TEST 3) sent POST data.
I'm not sure is some problem with CurlSharp, my code or sth else...
from curlsharp.
@mangusta @http200it The POST bug has been fixed for WIN64. Please see the newly added EasyPost sample application.
Expected outputs:
64-bit build:
Test curl 64 bit
Curl Version: libcurl/7.38.0 OpenSSL/1.0.1g zlib/1.2.8 WinIDN libssh2/1.4.3
========== TEST 1 HttpWebRequest ============
User-Agent: HttpWebRequest
Content-Type: application/x-www-form-urlencoded
Host: localhost
Content-Length: 38
Expect: 100-continue
Connection: Keep-Alive
Array
(
[parm1] => 12345
[parm2] => "Hello world!"
)
========== TEST 2 CurlEasy PostFields ============
User-Agent: CurlEasy PostFields
Host: localhost
Accept: */*
Content-Length: 38
Content-Type: application/x-www-form-urlencoded
Array
(
[parm1] => 12345
[parm2] => "Hello world!"
)
Press <ENTER> to exit...
32-bit build utilizing libcurlshim.dll:
Test curl 32 bit
Curl Version: libcurl/7.38.0 OpenSSL/1.0.1g zlib/1.2.8 WinIDN libssh2/1.4.3
========== TEST 1 HttpWebRequest ============
User-Agent: HttpWebRequest
Content-Type: application/x-www-form-urlencoded
Host: localhost
Content-Length: 38
Expect: 100-continue
Connection: Keep-Alive
Array
(
[parm1] => 12345
[parm2] => "Hello world!"
)
========== TEST 2 CurlEasy PostFields ============
User-Agent: CurlEasy PostFields
Host: localhost
Accept: */*
Content-Length: 38
Content-Type: application/x-www-form-urlencoded
Array
(
[parm1] => 12345
[parm2] => "Hello world!"
)
========== TEST 3 CurlEasy HttpPost ============
User-Agent: CurlEasy HttpPost
Host: localhost
Accept: */*
Content-Length: 246
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------226a2f4ded940c61
Array
(
[parm1] => value1
[parm2] => value2
)
Press <ENTER> to exit...
from curlsharp.
Thank you very much for improving CurlSharp 64 bit for POST - PostFields.
:-)
from curlsharp.
@http200it 32-bit build of CurlSharp uses the libcurlshim.dll helper library which was originally authored by Jeff Phillips. Unfortunately, this library was not ported to WIN64. I'm of little help in this regard as my C and assembly language skills are rusty. The CurlHttpMultiPartForm
class is dependent on libcurlshim.dll and does not yet work in non-WIN32 builds.
from curlsharp.
@ masroore - It is important that it works the ability to send POST data under Linux 64 Bit Net MONO. The primary concern ;)
from curlsharp.
@http200it @mangusta Now the 64-bit HttpPost
(multipart form-data) feature works without libcurlshim helper library.
Output from the EasyPost sample:
Test curl 64 bit
Curl Version: libcurl/7.38.0 OpenSSL/1.0.1g zlib/1.2.8 WinIDN libssh2/1.4.3
========== TEST 1 HttpWebRequest ============
User-Agent: HttpWebRequest
Content-Type: application/x-www-form-urlencoded
Host: localhost
Content-Length: 32
Expect: 100-continue
Connection: Keep-Alive
Array
(
[parm1] => 12345
[parm2] => Hello world!
)
========== TEST 2 CurlEasy PostFields ============
User-Agent: CurlEasy PostFields
Host: localhost
Accept: */*
Content-Length: 32
Content-Type: application/x-www-form-urlencoded
Array
(
[parm1] => 12345
[parm2] => Hello world!
)
========== TEST 3 CurlEasy HttpPost ============
User-Agent: CurlEasy HttpPost
Host: localhost
Accept: */*
Content-Length: 251
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------a61b6eaa416a1e00
Array
(
[parm1] => 12345
[parm2] => Hello world!
)
Press <ENTER> to exit...
from curlsharp.
It works by sending a POST easy.PostFields and easy.HttpPost on Windows 64 Bit and Linux Debian 7 64 Bit - Mono 3.8. Once again, thank you very much for improving the code.
@masroore - you are great ! -> Thank you :)
from curlsharp.
@http200it Thanks for confirming the fix on 64-bit Linux. I confirm the PostFields and HttpPost features work on OS X Xamarin as well.
from curlsharp.
Even setting the parameters works and does not work. I think it should work interchangeably so and so.
//easy.UserAgent = "Do UserAgent"; // Works
easy.SetOpt(CurlOption.UserAgent, "Do UserAgent SetOpt"); // Does not work
//easy.Proxy = "xxx.xxx.xxx.xxx:21320"; // Works
easy.SetOpt(CurlOption.Proxy, "xxx.xxx.xxx.xxx:21320"); // Does not work
//easy.PostFields = postData; // Works :)
easy.SetOpt(CurlOption.PostFields, postData); // Does not work
//easy.Encoding = "gzip, deflate"; // Works
easy.SetOpt(CurlOption.Encoding, "gzip, deflate"); // Does not work
easy.FollowLocation = true; // Works or
easy.SetOpt(CurlOption.FollowLocation, true); // Works
At the time, please check yourself/
from curlsharp.
@http200it Thanks for reporting the bug. String options were not set properly in the setObjectOptions() method.
Issue #2 is now fixed.
from curlsharp.
@masroore - Now the function easy.SetOpt (CurlOption. **, ***); works as it should.
Tested on Windows 64bit and Linix 64bit mono.
Thanks again for the quick improvement and help :-)
from curlsharp.
@masroore thank you very much for your intervention and for whole great job! It's working now. All the best!
from curlsharp.
Love curl and this .NET port.
However, I try to set option
easy.SetOpt(CurlOption.HttpHeader, "application/soap+xml; charset=utf-8");
but it always shows content-type:
application/x-www-form-urlencoded
from curlsharp.
@hieple Are you trying to set the content-type header? You can use the ContentType
property:
easy.ContentType = "application/soap+xml; charset=utf-8";
FYI, CurlOption.HttpHeader
takes a linked list of strings.
from curlsharp.
But easy.ContentType is read-only
from curlsharp.
Hello again. It does not work to send a file or send wrong? My test code:
string avatar = Application.StartupPath + @"\avatary\myface.jpg";
var mf = new CurlHttpMultiPartForm();
mf.AddSection(CurlFormOption.CopyName, "parm1", CurlFormOption.CopyContents, "value1", CurlFormOption.End);
mf.AddSection(CurlFormOption.CopyName, "parm2", CurlFormOption.CopyContents, "value2", CurlFormOption.End);
if (File.Exists(avatar))
{
mf.AddSection(CurlFormOption.CopyName, "uploadedfile", CurlFormOption.File, avatar, CurlFormOption.ContentType, "application/octet-stream", CurlFormOption.End);
Console.WriteLine(avatar);
}
easy.HttpPost = mf;
My OUT:
Array
(
[parm1] => value1
[parm2] => value2
)
Array
(
)
Host: www.testsite.com
Connection: close
Content-Length: 246
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
Accept-Encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Cache-Control: max-age=0
Pragma: no-cache
Content-Type: multipart/form-data; boundary=------------------------e489e380b38b4322
from curlsharp.
Related Issues (20)
- CurlEasy.setWriteData() bug HOT 1
- First push data generate unknown error HOT 1
- Suggest Set NoSignal = true When create CurlEasy object HOT 1
- WinSamples can not work HOT 4
- How can I use smartcard for client certificate ? HOT 1
- Trying samples - missing libcurl64.dll HOT 5
- Update to libcurl 7.52 HOT 1
- TLS error handling broken HOT 1
- Will Multi set opt be supported HOT 2
- NativeMethods problem
- I Know is already asked, but, cant compile demos. System.DllNotFoundException HOT 1
- Basic Auth
- Curl SSL Two way communiation
- headers order HOT 1
- MultiDemo allways console write "CurlMulti.Select() returned -1";
- Support for TLS 1.2
- lib file name error on ubuntu
- Response code confusion HOT 1
- How do I upload wav file to server? HOT 1
- Problem loading libcurl.dll HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from curlsharp.