• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 849
  • Last Modified:

POST method don't work, need example

I can't get the function CHttpFile::SendRequest to work
as I use the post method. The webserver is IIS 4.0.

I'm requesting an ASP and I get a CInternetException:
no 87, "Invalid parameter" (or something like that, I use
swedish so I get the message in swedish).

Do you have any working example code using post method
in CHttpFile?
0
snilsson
Asked:
snilsson
  • 5
  • 3
  • 2
1 Solution
 
NotJeffCommented:
Here is some code I use to read from an ASP page:

int CJeffsHttpConnection::ConnectToURLandRead(CString url, CString *buffer)
{
      int rval = TRUE;

      DWORD dwHttpRequestFlags =
      INTERNET_FLAG_RELOAD |
      INTERNET_FLAG_EXISTING_CONNECT |
      INTERNET_FLAG_NO_AUTO_REDIRECT |
      INTERNET_FLAG_DONT_CACHE;
      
      const TCHAR szHeaders[] = _T("Accept: text/*\r\nUser-Agent: Your Appliction\r\n");

      CString strServerName;
      CString strObject;
      INTERNET_PORT nPort;
      DWORD dwServiceType;

      if (!AfxParseURL(url, dwServiceType, strServerName, strObject, nPort) ||
            dwServiceType != INTERNET_SERVICE_HTTP)
      {
            cerr << _T("Error: can only use URLs beginning with http://") << endl;
            ThrowTearException(1);
      }

      CInternetSession inetSession;
      CHttpConnection* pHttpConection = inetSession.GetHttpConnection( (LPCTSTR) strServerName);
      CHttpFile* pHttpFile = pHttpConection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                  strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);
      
      pHttpFile->AddRequestHeaders(szHeaders);
      pHttpFile->SendRequest();
 
0
 
snilssonAuthor Commented:

The example given of NotJeff is not an POST example,
it's just a modified GET example. He doesn't supply
any parameters (like "name=joe&userid=xx") and nothing
works in his example.
I can send a POST request to the websever but it doesn't recognize the parameters.
0
 
mikeblasCommented:
Odds are that you're not including the right headers with your request. Most ASP components are set up to expect a form when they receive a POST. As such, you should make sure the request you're sending is actually _sending_ a form.

You should be sending the header "Content-Type: application/x-www-form-urlencoded" with your request so the server (and the ASP processor) know you're sending along the encoded content of a form.

B ekiM

0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
snilssonAuthor Commented:
I am sorry mikeblas, but I have tried those headers
and it doesn't work.

IIS 4.0 just don't recognize the parameters, it's acting
like no parameters were sent, and my Request-object on the
ASP contains nothing.

This is not easy!!

SN
0
 
snilssonAuthor Commented:
The IIS doesn't recognize the parameters I send
in my POST statement. The Request-object on the ASP
contains nothing.
0
 
mikeblasCommented:
Does the ASP work from a web browser?  If so, a very direct way to solve your problem is to use the browser to work the ASP while monitoring the communication with a network sniffer. You can see the exact request sent by the browser, and then replicate that request using WININET calls.

If you don't have access to a network sniffer, write a small ISAPI filter that logs the raw request text to a file.

B ekiM
0
 
NotJeffCommented:
My code works.  I use it in a real world released application.   On top of that I use IIS 4.0  and ASP pages to read all the application sent.  So yes the code does work.  i.e. I send
a url:  "http://www.mydomain.com/asps/validateuser.asp?Username=joe&Passcode=blow"

<body>
<% localUsername = Request.QueryString("Username") %>
<% localPasscode = Request.QueryString("Passcode") %>

<%
fp_sQry = "select * from UserListTable where  User_ID='" + cstr(localUsername) + "'"

I agree with mikeblas.  You should first make a form
and make sure you can do it with a form on a web page.
Also please see the following code on the difference between getting variables from a form and from a URL on an ASP page

<html>
<body>
<p>Name entered via form is: <%= Request.Form("Username") %> </p>
<p>Name entered via url is: <%= Request.QueryString("Username") %> </p>
0
 
snilssonAuthor Commented:

I don't know what made my program work actually, but now
it's working. From the begining I couldn't use my webbrowser
to post to my ASP as well as my MFC-appl.
I did some changes in my program but no one of the suggested
but somehow it works now.

Mikeblas: Thank you for your help and comments.

NotJeff: Your last comment shows the use of the Querystring of
the Request-object. Your also supply "http://www.mydomain.com/asps/validateuser.asp?Username=joe&Passcode=blow", and isn't that how GET is done?
Anyway I'm sorry I questioned your code so hard in the first place - I just had a bad day. Thank you too.

How can I give anyone any points now for the help?
No one directly helped me but Mikeblas or NotJeff is worth
something.
0
 
NotJeffCommented:
Hell I could use the points and this needs to be closed out!
0
 
snilssonAuthor Commented:
OK, NotJeff gets some easy points...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

  • 5
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now