multipart/form-data + Sockets = Server not Responding - c#

I'm using my own HTTP wrapper using sockets. So far everything works except multipart/form-data POST. When I send the data to server, it simply doesn't respond, so I'm guessing I'm missing something in my POST like I would need "\r\n\r\n" for regular requests.
This is my request:
POST /getproxies/get.php HTTP/1.1
Host: myhost.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Cookie: sid=UtozR43zQQAtVA2Np0KP_ZLnO0IYwwU1S_Tt4Z3N80wctL;
Connection: Close
Content-Type: multipart/form-data; boundary=---------------------------4664151417711
Content-Length: 411
---------------------------4664151417711
Content-Disposition: form-data; name="proxy_count"
20 proxies
---------------------------4664151417711
Content-Disposition: form-data; name="u"
13
---------------------------4664151417711
Content-Disposition: form-data; name="opt_1"
---------------------------4664151417711
Content-Disposition: form-data; name="opt_2"
GET
---------------------------4664151417711--
When I send the data, the connection is open, like it would be waiting on the server, but server doesn't respond. Any ideas what am I missing here? Thanks

Your boundary isn't matching the one declared on the boundary= part.
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--

RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types:
The Content-Type field for multipart entities requires one parameter,
"boundary". The boundary delimiter line is then defined as a line
consisting entirely of two hyphen characters ("-", decimal value 45)
followed by the boundary parameter value from the Content-Type header
field, optional linear whitespace, and a terminating CRLF.
So I guess this should work:
Content-Type: multipart/form-data; boundary=54472172614771
Content-Length: 47
--54472172614771
Your data
--54472172614771--
Please note the boundary specified in the boundary parameter of the Content-Type header should match the boundary you use in the payload. Also note the boundaries also count towards the Content-Length.

Related

Content type in call to web service

Please correct me if I'm wrong in defining contet type:
Content-Type: application/json; charset=utf-8
{"my_id":"975","my_a_id":"Test66","param":"4","amount":"66"}
and
Content-Type: application/x-www-form-urlencoded
my_id=123&my_a_id=Test66&param=4&amount=66
What other content types might be?
What content type supports RESTLet NetSuite services?
I have POST to web service:
POST https://some.netsuite.uri?deploy=1 HTTP/1.1
Authorization: NLAuth nlauth_account=3624292_SB3, nlauth_email=xduh31#gmail.com, nlauth_signature=Pass987654, nlauth_role=3
Accept: application/json
Content-Type: application/json; charset=utf-8
Host: rest.eu1.netsuite.com
Cookie: JSESSIONID=**************************************; lastUser=1234567_SB9_1282_3; NS_ROUTING_VERSION=LAGGING; NS_VER=2017.1.0
Content-Length: 69
Expect: 100-continue
{"my_id":"975","my_a_id":"Test66","param":"4","amount":"66"}
Is it good that in URL I have something like x-www-form-urlencoded - ?deploy=1
https://some.netsuite.uri?deploy=1
and data is json style:
{"my_id":"975","my_a_id":"Test66","param":"4","amount":"66"}
UPD
I got answer that I suppose should return JSON data:
HTTP/1.1 200 OK
Date: Sat, 03 Jun 2017 06:21:46 GMT
Server: Apache
Cache-Control: No-Cache
Pragma: No-Cache
Content-Length: 41
Expires: 0
Edge-Control: no-store
X-N-OperationId: 486c2d20-099d-446b-9788-4816db59a1fd
Set-Cookie: .......................; path=/
NS_RTIMER_COMPOSITE: 1688996695:706172746E6572733030312E70726F642E6475622E6E65746C65646765722E636F6D:80
P3P: CP="CAO PSAa OUR BUS PUR"
Vary: User-Agent
Content-Type: application/json; charset=utf-8
org.mozilla.javascript.Undefined#54b896b0
But this answer not looks like JSON?
One problem might be your URL. Have you tried changing
https://some.netsuite.uri&deploy=1
to
https://some.netsuite.uri?deploy=1
Edit:
Also, your Accept header says you are looking for an application/json response, is that what the server is returning?
You can find supported content types in NS Help Center:
RESTlets support JSON and plain text content types for input and
output. For each RESTlet, output content type is the same as input
content type.
You must set the content type in the HTTP Content-Type header. You can
use the following values to specify the input/output content type for
a RESTlet:
application/json
text/plain
If you specify a content type other than JSON or text, a 415 error is
returned with the following message:
Invalid content type. You can only use application/json or text/plain
with RESTlets.
Documentation
Besides that the issue in the url mentioned by shazmodan, the script Id is missing. Below is an example of a valid restlet url:
https://rest.netsuite.com/app/site/hosting/restlet.nl?deploy=1&script=1
You can pass additional parameters in the url:
https://rest.netsuite.com/app/site/hosting/restlet.nl?deploy=1&script=1&my_id=123&my_a_id=Test66&param=4&amount=66
or in the request body if you are using POST and PUT methods but it needs to be a valid JSON. But the Content Type must always be application/json or text/plain.

I want to upload video on amazon cloud using REST api

I have shared Documentation to upload file from this link.
Upload File
Uploads the file content along with its metadata information.
POST : {{contentUrl}}/nodes?suppress={suppress}
suppress : (Optional)
deduplication: disables checking for duplicates when uploading Body Parameters:
Multi-form part
--------- metadata ------------
name (required) : file name. Max to 256 Characters. kind (required) : "FILE" labels (optional) : Extra information which is indexed. For example the value can be "PHOTO" properties (optional) : List of properties to be added for the file. parents(optional) : List of parent Ids. If no parent folders are provided, the file will be placed in the default root folder.
---------content ------------
File Bytes
Sample Request:
POST /cdproxy/nodes?localId=testPhoto
HTTP/1.1
Host: content-na.drive.amazonaws.com
Authorization: Bearer
Atza|IQEBLjAsAhReYeezFcFdYzqrFOJGv3EG
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="metadata"
{"name":"fooo.jpg","kind":"FILE"}
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="content";
filename="db5df4870e4e4b6cbf42727fd434701a.jpg"
Content-Type: image/jpeg
----WebKitFormBoundaryE19zNvXGzXaLvS5C
**cURL Request:**
curl -v -X POST --form
'metadata={"name":"testVideo1","kind":"FILE"}' --form
'content=#sample_iTunes.mp4'
'https://content-na.drive.amazonaws.com/cdproxy/nodes?localId=testVideo1&suppress=deduplication'
--header "Authorization: Bearer
Atza|IQEBLjAsAhQ5zx7pKp9PCgCy6T1JkQjHHOEzpwIUQM"
Fiddler:
I have written code and sent request.
This is the request i have sent using Fiddler
POST
https://content-na.drive.amazonaws.com/cdproxy//nodes?suppress=deduplication
HTTP/1.1 Authorization: Bearer
Atza|IQEBLjAsAhQXfR4gxrstIKB8jjCbbsTIRhad1QIUZgLJFXgenPSsYLp6VHeL2rEBQ6RFSQYAR847Pvr8bnF4wc-qAlP2oKbAxogI_KJBopMzbTwt3n1DgJ9D8VJTikjdkXH7_595n4ElGhAhKJybhiXBlZLDh7ScXiFC6g4MFfkVRMKoKWAf4gRhhYGTLX2nBSHWIYx5kpzbS0QNgOUS_Hluodfq0j5gf8FeNB3YG6q-KiQMdPbcXJFlKs28f_cSWnQvYyLu0c8YzcJZpjL3CTrabnGpF5KOM6ie71Q2mS3ncL71tEO5wu3MVEJZZtg00MKM5nkGAzH1hCHqA0PWmsLsQVm0X684Seje7aSMYDlh0hcRpgc4Y7fusEndnprz5EO9FftNDN3lbvxszgAR0DhoOg
Content-Type: multipart/form-data Host: content-na.drive.amazonaws.com
Content-Length: 2100825 Expect: 100-continue
------WebKitFormBoundary8d2ff0fafd6a750 Content-Disposition: form-data; name="metadata"
{"name":"C:\Users\jafar.baltidynamolog\Downloads\SampleVideo_360x240_2mb.mp4","kind":"FILE"}
------WebKitFormBoundary8d2ff0fafd6a750 Content-Disposition: form-data; name="content";
filename="C:\Users\jafar.baltidynamolog\Downloads\SampleVideo_360x240_2mb.mp4" Content-Type: video/mp4
��� ftypisom���isomiso2avc1mp41���free��LmdatT Lj����L5
��P�L"�:�ԮoUNx��V���qFM4��w�ח�l�iݧ����o��͑s����z���/e��ۢ�a���G��y�j�W-&{x�w��>�I���6�v�u�j;��pk#�=�K�ZO.a�yy
-w(���ژ�#S�Rpt<{�ڿZ38xt���x�[��ɒ�&�lsT��4P��rMXv��Ѹ%A�5���C�hH& ���P� Z���翷�n�����z���5t��D��M%�}���i���P|�k��#�>�#�tq�O�K���sy��=�\��9���)���Ɏ��������T��(��=v����
)D���R;zKBx��PU� ���E�/bB��)p�h,6��`��� ���XH2
Problem is that i am getting Error 500 internal Error. Kindly help me understand if some thing is missing or wrong. I am using this code to upload video. Kindly help me

RestSharp doesn't UTF-8 Encode the Request

I'm trying to POST a request with one lonely parameter, as such:
var client = new RestClient("http://www.fluff.com");
var request = new RestRequest("whatever", Method.POST);
request.AddParameter("param", "Оксана");
client.Execute(request);
This results in the following request, notice the bunch of encoded question marks:
POST http://www.fluff.com/whatever HTTP/1.1
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/105.0.1.0
Content-Type: application/x-www-form-urlencoded
Host: www.fluff.com
Content-Length: 24
Accept-Encoding: gzip, deflate
param=%3F%3F%3F%3F%3F%3F
Imagine the sadness when the receiver gets those question marks..
How do I make RestSharp properly encode the body as UTF-8, or how do I send the request in a RestSharp friendly way so that she doesn't garble the data?
Christer, that's standard encoding for Content-Type: application/x-www-form-urlencoded, which uses ISO-8859-1 as a default. If you specifically want to tell the server to expect UTF-8, you can add ; charset=UTF-8 at the end Content-Type: application/x-www-form-urlencoded ; charset=UTF-8. But then it's your responsibility to make sure the data you post is really encoded in UTF-8.
Or if you want to do it in "application/json", you can set the content type in this way (I got this from http://itanex.blogspot.com/2012/02/restsharp-and-advanced-post-requests.html):
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", strJSONContent, ParameterType.RequestBody);
You could also use multipart/form-data: <form action="YOUR_ACTION_NAME_HERE" method="post" enctype="multipart/form-data">

Photo Upload On Facebook

I want to Upload Photo to Facebook Page using HttpWebRequest
and I don't want to use Facebook Graph API ..
via live http header i get the url and data which is need to be posted
user=XXXXXXXXXXXXX&_a=1&_dyn=XXXXXXXXXXXX&_req=s&fb_dtsg=AQAszPoc&ttstamp=26581651151228011199&__rev=1141676">https://upload.facebook.com/ajax/composerx/attachment/media/saveunpublished?target_id=XXXXXXXXXXXXXX1&_user=XXXXXXXXXXXXX&_a=1&_dyn=XXXXXXXXXXXX&_req=s&fb_dtsg=AQAszPoc&ttstamp=26581651151228011199&__rev=1141676
DATA which will be used for sending with url
-----------------------------3300296215819
Content-Disposition: form-data; name="fb_dtsg"
AQAszPoc
-----------------------------3300296215819
Content-Disposition: form-data; name="source"
8
-----------------------------3300296215819
Content-Disposition: form-data; name="profile_id"
xxxxxxxxxxx
-----------------------------3300296215819
Content-Disposition: form-data; name="grid_id"
u_6_0
-----------------------------3300296215819
Content-Disposition: form-data; name="qn"
a9f0f5a0f2104b0ef0656f692cda9893
-----------------------------3300296215819
Content-Disposition: form-data; name="0"; filename="1794679_698919370150942_1311355907_n.jpg"
Content-Type: image/jpeg
YOUR DATA OR IMAGE
-----------------------------85332783618735
Content-Disposition: form-data; name="upload_id"
1025
-----------------------------85332783618735--
I m not sure how to get this value
Content-Disposition: form-data; name="qn"
a9f0f5a0f2104b0ef0656f692cda9893
can someone helpe me out
everytime when i tried to upload i got error
for (;;);{"__ar":1,"error":1357032,"errorSummary":"Sorry, we got confused","errorDescription":"Please try refreshing the page or closing and re-opening your browser window.","payload":null,"bootloadable":{},"ixData":[]}
reason why i don't want to use FaceBook Graph API is that whenever we post/upload it display message " 33 minutes ago via Graph API Explore"
please help me out
Thanks

Logging into a website by code

I have to download an excel file from a website through code. But the downloading requires logging into a website. So I am confused that what data should I post to login from code.
Here's the request from chrome:
Request URL:https://206.82.192.135:4100/wgcgi.cgi?action=fw_logon&style=fw_logon.xsl&fw_logon_type=status
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:884
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Cookie:domain=null; username=CandA
Host:206.82.192.135:4100
Origin:https://206.82.192.135:4100
Referer:https://206.82.192.135:4100/wgcgi.cgi?action=fw_logon&style=fw_logon.xsl&fw_logon_type=status
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Query String Parametersview sourceview URL encoded
action:fw_logon
style:fw_logon.xsl
fw_logon_type:status
Request Payload
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="fw_username"
[username appears here]
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="fw_password"
[password appears here]
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="fw_domain"
Firebox-DB
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="fw_domain"
Firebox-DB
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="submit"
Login
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="action"
fw_logon
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="style"
fw_logon_progress.xsl
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic
Content-Disposition: form-data; name="fw_logon_type"
logon
------WebKitFormBoundaryPAzPZF4h5AQHA6Ic--
Response Headersview source
Connection:close
Content-Length:289
Content-Type:text/xml
Date:Wed, 21 Aug 2013 13:00:10 GMT
Server:None
If you search for a simple solution try to use the WebBrowser control. You can iterate through all of the items of the page and set username and password, then genaerate a click on the login button.
I explored more and found that I was not being authenticated by the SSL and I was getting this exception:
Could not establish trust relationship for the SSL/TLS secure channel
So I got a piece of code from
this
System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
and it solved my problem

Categories