Using perl with the HTTP POST method to exchange XML with the Auth service

Has anyone written a perl script to do this yet?
I've been trying all day and keep getting "Content is not allowed in prolog.
I've used the example xml from the docs
<?xml version="1.0" encoding="UTF-8"?>
<AuthContext version="1.0">
<Request authIdentifier="0">
<NewAuthContext orgName="dc=exampleorg,dc=com">
</NewAuthContext>
</Request>
</AuthContext>
Then I read the python post at http://swforum.sun.com/jive/thread.jspa?forumID=79&threadID=22370
and the error changed to Premature end of file.
this is the portion of perl that is getting the error:
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
my $browser = LWP::UserAgent->new(agent => 'xml client');
my $greeting = <<GREETING;
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RequestSet vers="1.0" svcid="auth" reqid="1">
     <Request>
     <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
     <AuthContext version="1.0">
          <Request authIdentifier="0">
               <NewAuthContext orgName="dc=belo,dc=com">
               </NewAuthContext>
          </Request>
     </AuthContext>]]></Request>
</RequestSet>
GREETING
my $response = $browser->request(POST 'http://idpoc1.test.belo.com/amserver/authservice',
                    Content_Type => 'text/xml',
                    Content     => [xmlRequest => $greeting]
print $response->error_as_HTML unless $response->is_success;

Your problem seems to lie in the build of the request. Here you use the "sample=$data" which will invalidate the XML itself. I've tested your code changing only the build of the Request and this works fine! Given an XML like this :
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
     <txnInfo sourcePartnerCode="6" txnDate="2005.09.08"/>
     <unitOfWorkInfo sourceTicketID="SourceTicket_1" diaryEntry="Diray_1" Status="Status_OK"/>
</data>
The Server Stub should look like this :
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;
print qq{Content-type: text/xml\n\n};
if($ENV{'REQUEST_METHOD'} eq "GET"){
     $my_data = $ENV{'QUERY_STRING'};
     print "jfghdsfjghsdg$my_data";
} else {
     $data_length = $ENV{'CONTENT_LENGTH'};
     $bytes_read = read(STDIN, $my_data, $data_length);
     print "$bytes_read, $my_data";
     $xml = new XML::Simple (KeyAttr=>[]);
     print "have passed XML::Simple creation\n";
     $data = $xml->XMLin("$my_data");
     print "i want to be here \n";
     $transcode=$data->{txnInfo}->{sourcePartnerCode};
     #print "$data->{txnInfo}->{sourcePartnerCode}";
     print $transcode;
     CASE: {
          ($transcode==6) && do {
               print "i am here";
               $lstmoddat=$data->{txnInfo}->{txnDate};
               $srctktid=$data->{unitOfWorkInfo}->{sourceTicketID};
               $actvtylogdesc=$data->{unitOfWorkInfo}->{diaryEntry};
               $status=$data->{unitOfWorkInfo}->{Status};
               $command='bop_cmd -f update1.frg "upd_stats("""Administrator""","""'.$srctktid.'""","""FIP""","""what is this???""")"';
               print "$lstmoddat $srctktid $status \n";
               print "$command";
               system("$command");
               print "i am done";
               last CASE;
And the client stub should look like this :
use LWP::UserAgent;
use HTTP::Request;
use IO;
#use XML::Writer;
my $ua = LWP::UserAgent->new(env_proxy => 1, keep_alive => 1, timeout => 30, );
open INPUT, "<AcceptIncident.xml";
my @greeting = <INPUT>; #-- Read file containing XML struct to send
print "Hello World\n";
my $data_to_send; #-- And build a string of it
foreach my $newItem (@greeting) {
     $data_to_send = "$data_to_send$newItem";
print "Sending \n";
my $head = HTTP::Headers->new(Content_Type => "text/xml", "ID" => "sample");
my $req = HTTP::Request->new('POST', 'http://matrix/cgi-bin/test1.pl', $head, "$data_to_send");
my $response = $ua->request($req);
print $response->as_string; Also you should make sure you have both HTTP::Request amd XML::Simple installed, orelse this will not work.
Hope this is of some help to you.

Similar Messages

  • JAX-WS -- Force a wsimport generated ws client to use http POST method

    I've used wsimport to generate a JAX-WS client for a wsdl and xsd bindings that were provided to me.
    The basic implementation goes something like this.
    URL serviceUrl = ...url to the live web service's wsdl (this will change often and needs to be data driven)
    QName qname = new QName("thenamespace", "MyService")
    MyService myService = new MyService(serviceUrl, qname);
    At this point a http GET request is sent to the server which promptly spits back a "405: method not allowed" because it is only configured to accept the http POST method.
    Unfortunately i cannot change this behavior and need a way to get the web service client to generate http POST requests.
    Setting the following seemed to have no effect.
    System.setProperty("javax.xml.ws.http.request.method", "POST");
    Thanks!

    so, keep the wsdl as a local resource and use a url for the local resource. then the service will not request the remote wsdl.

  • Example of sending the po request to my partner using https post method

    I need to send the po request to my partner using https post method.
    Is there any example for my scenario in oracle b2b?
    Usecase:
    mycompany
    othercompany
    mycompany -> Posts xml document with no namespace -> othercompany
    Protocol: https

    I need to send the po request to my partner using https post method.It is possible. FYI, by default HTTPS uses post method.
    Is there any example for my scenario in oracle b2b?Not exact sample is available but yes, similar samples are available here -
    http://www.oracle.com/technology/sample_code/products/b2b/index.html
    I would suggest you to go through below tutorial to have better understanding -
    http://www.oracle.com/technology/products/soa/b2b/collateral/B2B_TU003_ebxml.pdf
    Namespace is not an issue. It's upto you whether you like to keep it or not. From XML technology point of view, it is always recommended to have a namespace to bind each and every node with it, but I have seem cases where people don't use them.
    Regards,
    Anuj

  • Can i call a HTTP Post method in ABAP or XI?

    Hi All,
    Can you please let me know how to call a HTTP Post method in ABAP or XI?
    my HTTP Post is looks like (HTML form)
    <form action="http://111.111.111.1:8080/sample_url" method="POST">
    <table>
    <tr><th>applicationId</th><td><input type="text" name="applicationId" value="test"></td></tr>
    <tr><th>authCode</th><td><input type="text" name="authCode" value="test"></td></tr>
    <tr><th>message</th><td><input type="text" name="message" value="Hello"></td></tr>
    <!--<tr><th>version</th><td><input type="text" name="version" value="3.1"></td></tr> -->
    <tr><th>contractId</th><td><input type="text" name="contractId" value="test"></td></tr>
    <tr><th>receiverMobileNumber</th><td><input type="text" name="receiver" value="11111111111"></td></tr>
    <tr><td colspan="2"><input type="submit" name="send" value="send"></td></tr>
    </table>
    </form>
    I have a requirement to send a message to the above mention URL using the POST method.
    Please let me know the possibility of sending it from ABAP or XI adaptor.
    Thanks & Regards,
    Chaminda

    Hi Prateek,
    shoul we send the below code as the payload?
    <tr><th>applicationId</th><td><input type="text" name="applicationId" value="test"></td></tr>
    <tr><th>authCode</th><td><input type="text" name="authCode" value="test"></td></tr>
    <tr><th>message</th><td><input type="text" name="message" value="Hello"></td></tr>
    <!--<tr><th>version</th><td><input type="text" name="version" value="3.1"></td></tr> -->
    <tr><th>contractId</th><td><input type="text" name="contractId" value="test"></td></tr>
    <tr><th>receiverMobileNumber</th><td><input type="text" name="receiver" value="11111111111"></td></tr>
    Thanks.
    Chaminda

  • Http POST method related

    What type of data we can send using http POST method apart from text(string) ? Is it possible to send some video or file or image through http POST method ?

    Consider the way you upload a file as an email attachment. Or when using a web-interface to upload a file to a web host. The only restriction you might encounter is a size limit.

  • How to call HTTP Post Method URL in SOA 10g

    Hi,
    I have a requirement where i need to call a HTTP Post Method, I have a URL, if i hit it in the browser, i am getting the response details. I know there is a HTTP Binding Adapter in 11g, but we are on 10g. Can anyone please let me know whether we can do it in 10g and how ?
    Thanks Always
    N

    You will need to write the WSDL by yourself. Just make sure you have the end point detail, operation name(if required) and the schema available to write the WSDL.

  • How to call HTTP POST method in SOA 10g

    Hi,
    I have a requirement where i need to call a HTTP Post Method, I have a URL, if i hit it in the browser, i am getting the response details. I know there is a HTTP Binding Adapter in 11g, but we are on 10g. Can anyone please let me know whether we can do it in 10g and how. ?
    Thanks Always
    N

    Look at 10g samples under tutorials/702.bindings.

  • What are the necessary elements in ejb-jar.xml with CMP entity bean

    What are the necessary elements in ejb-jar.xml with CMP entity bean
    Actually i am using webligic 8.1 and while deployment getting the error that
    some elements r missing
    Thanks
    Anand Pritam

    According to the ejb-jar.xml dtd ejb-name, ejb-class, persistence-type, prim-key-class, reentrant are the required elements for an entity bean.
    <!ELEMENT entity (description?, display-name?, small-icon?,
              large-icon?, ejb-name, home?, remote?, local-home?,
              local?, ejb-class, persistence-type, prim-key-class,
              reentrant, cmp-version?, abstract-schema-name?,
              cmp-field*, primkey-field?, env-entry*, ejb-ref*,
              ejb-local-ref*, security-role-ref*, security-identity?,
              resource-ref*, resource-env-ref*, query*)>

  • Trying to Imitate the html POST  method with an applet

    I am trying to imitate the POST method with an applet, so that I can eventually send sound from a microphone to a PHP script which will store it in a file on a server. I am starting out by trying to post a simple line of text by making the PHP script think that it is receiving the text within a POST-ed file. The reason I am doing things this way is in part because I am, for the time being, limited to a shared server without any support for servlets or any other server side java.
    The code I am trying is based in part on an old thread found elsewhere in this forum, concerning sending data to a PHP file by imitating the POST method:
    link:
    http://forum.java.sun.com/thread.jspa?threadID=530399&messageID=2603608
    someone named "harmmeijer" provided most of the answers on that thread. If that person is still around hope they take a look at this,also I have some questions to clarify what they said on the other thread..
    My first attempt at code is below. The applet is in a signed jar file and is trying to pass a text line to the PHP script in the same directory and on the same server that the applet came from. It is doing this by sending header information that is supposed to be identical to what an html form would send if it was uploading a .txt file with the line of text within it. The applet displays one button. When you press it, it sucessfully starts up the postsim method (defined at the end), which is supposed to send the info to the PHP script at the server.
    I have two questions:
    1) I know that the PHP script is starting up, because it prints out a few messages depending on what happens. However, the script does not recognize any file coming down the line, so it does not save anyting on the server, and prints out a message saying the no file was uploaded.
    Any idea what might be going wrong? I'm not getting any error messages from the applet. I've tried a few different variations of the 'header' information contained in the line:
    osToServer.writeBytes("--****4353\r\nContent-Disposition: form-data; name=\"testfile\"; filename=\"C:testfile.txt\"\r\nContent-Type: text/plain\r\n");
    The commented out line below it shows one variation (which was given in the thread mentioned above).
    2) You'll notice that I've commented out the two lines having to do with the input line:
    //InputStream isFromServer;
    and
    //isFromServer = uc.getInputStream();
    The reason is that the program crahes whenever I put the latter line in - to the extent that Opera closes down the JVM and then crashes when I tried to exit it.. I must be doing something horribly wrong there! I first tried using isFromServer = new DataInputStream(uc.getInputStream());
    becuase it was consistent with the output stream, but that caused the same problem.
    Here's the code:
    public class AudioUptest1 extends Applet{
    //There are a few spurious things defined in this section, having to do with the fact the microphone data is evenuatly going to be sent. haven't yet insterted code to get input from a microphone.
    AudioFormat audioFormat;
    TargetDataLine targetDataLine;
    SourceDataLine sourceDataLine;
    DataOutputStream osToServer;
    //InputStream isFromServer;
    URLConnection uc;
    final JButton captureBtn = new JButton("Capture");
    final JPanel btnPanel = new JPanel();
    public void init(){
    System.out.println("Started the applet");
    try
    URL url = new URL( "http://www.mywebsite.com/handleapplet.php" );
    uc = url.openConnection();
    //Post multipart data
    uc.setDoOutput(true);
    uc.setDoInput(true);
    uc.setUseCaches(false);
    //set request headers
    uc.setRequestProperty("Connection", "Keep-Alive");
    uc.setRequestProperty("HTTP_REFERER", "http://applet.getcodebase");
    uc.setRequestProperty("Content-Type","multipart/form-data; boundary=****4353");
    osToServer = new DataOutputStream(uc.getOutputStream());
    //isFromServer = uc.getInputStream();
    catch(IOException e)
    System.out.println ("Error etc. etc.");
    return;
    //Start of GUI stuff
    captureBtn.setEnabled(true);
    //Register listeners
    captureBtn.addActionListener(
    new ActionListener(){
    public void actionPerformed(
    ActionEvent e){
    captureBtn.setEnabled(false);
    //Postsim method will send simulated POST to PHP script on server.
    postsim();
    }//end actionPerformed
    }//end ActionListener
    );//end addActionListener()
    add(captureBtn);
    add(btnPanel);
    // getContentPane().setLayout(new FlowLayout());
    // setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(250,70);
    setVisible(true);
    }//end of GUI stuff, constructor.
    //These buffers might be made larger.
    byte tempOutBuffer[] = new byte[100];
    byte tempInBuffer[] = new byte[100];
    private void postsim(){
    System.out.println("Got to the postsim method");
    try{
    //******The next four lines are supposed to imitate a POST upload from a form******
    osToServer.writeBytes("--****4353\r\nContent-Disposition: form-data; name=\"testfile\"; filename=\"C:testfile.txt\"\r\nContent-Type: text/plain\r\n");
    //osToServer.writeBytes("Content-Disposition: form-data; name=\"testfile\"; filename=\"C:testfile.txt\"\r\nContent-Type: text/plain\r\n");
    //This is the text that's cupposed to be written into the file.
    osToServer.writeBytes("This is a test file");
    osToServer.writeBytes("--****4353--\r\n\r\n");
    osToServer.flush();
    osToServer.close();
    catch (Exception e) {
    System.out.println(e);
    System.out.println("did not sucessfully connect or write to server");
    System.exit(0);
    }//end catch
    }//end method postsim
    }//end AudioUp.java

    Hi All,
    I was trying to write a signed applet that helps the
    user of the applet to browse the local hard disk and
    select a file from the same. The JFileChooser class
    from Swing is what I used in my applet. The problem
    is with the policy file. I am not able to trace the
    exact way to write a policy file which gives a total
    access to read,write,delete,execute on all the drives
    of the local hard disk.
    I am successful in signing the applets and performing
    operations : read,write,delete & execute on a single
    file but failing to grant permission for the entire
    file.
    Any help would be highly appreciated.Which policy file are you using? there might be more than one policy file.
    also, u have to specify the alias of the signed certificate in the policy file to grant the necessary priviledges to the signed applet.

  • Need JDeveloper Web Service with HTTP POST method

    Hello all,
    I am creating a Web Service from a java class using JDeveloper. The wsdl created uses a SOAP binding. When I test the web service, either through JDeveloper or by deploying to OAS, the HTTP request created uses the HTTP GET protocol. I am assuming that this would be the same for anybody doing this.
    I need to know how to change it to be an HTTP POST protocol instead.
    The reason that I need to try and use the POST method is that the xml needed by the service holds a lot of data and the http server is giving me a "URI too long" error. I have read and been told that using POST instead of GET would help this, but I can't figure out what to change to make this happen. I am not sure if I have to make a change in the generated wsdl or somewhere else. Or if it just won't work that way.
    Any help you can provide would be appreciated.
    Thanks,
    rob

    Hi Ayush,
    Please refer -
    http://biemond.blogspot.com/2010/08/http-basic-authentication-with-soa.html
    Regards,
    Anuj

  • Issue with Remove Namespace HTTP POST method

    I am working on an integration where cXML from the Partner will be posted to SOA and from SOA another HTTP post to end partner. its basically
    HTTP Post(partner 1)----------------->SOA--------------->HTTP Post(Partner 2).
    I have cXML its in dtd format which i have converted to Native format using file-adapter and added namespace schema. so My question is while cXML is post to SOA i have added namespace schema and consumed it to my BPEL, while it leaves out Partner2 through HTTP post again the namespace should be removed and sent to partner 2. I am stuck at this Point. need Urgent help. please. how to remove name space.

    Hi,
    Create xsl style sheet file (xml) from you jdeveloper. Path to go File->New. go to all technogloy tab and select All Items catagory and select XSL style sheet.
    Remove content in the generated xml file and copy and paste the below code
    <?xml version='1.0' encoding='UTF-8'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl ns1">
    <xsl:template match="comment()|processing-instruction()|/">
    <xsl:copy>
    <xsl:apply-templates/>
    </xsl:copy>
    </xsl:template>
    <xsl:template match="*">
    <xsl:element name="{local-name()}">
    <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
    <xsl:choose>
    <xsl:when test="name() != 'xmlns'">
    <xsl:attribute name="{local-name()}">
    <xsl:value-of select="."/>
    </xsl:attribute>
    </xsl:when>
    </xsl:choose>
    </xsl:template>
    </xsl:stylesheet>
    In Your bpel process under assign activity give it as below
    <copy>
    ora:getContentAsString( ora:processXSLT( 'xsl/removeNamespaces.xsl', bpws:getVariableData('variable name','rootelement')))
    <to variable="String"/>
    </copy>
    String variable contains your xml message with out namespaces in string format.
    You can pass this string content to your partnerlink 2.
    Regards,
    Tarak.

  • HTTP POST method does not pass parameters to the server

    Hi ,
    I am using SSO using VSJ product and implemented using a filter.
    I have problems as below
    1. Every request to the web server will be intercepted by this vsj filter and if sso does not succeed it will send 403
    2. my system will detect 403 in web.xml and redirect to login page
    3. user key in username and password and log in
    4. after successful login set the HttpSession and redirect to homepage
    Problem is subsquent form submit / ajax call using "POST" method cannot pass any parameters to the servers ( parameters sent using POST will be null in the servers )  ? GET is okay
    If i comment out the vsj filter altogether , everything works as per normal.
    My Question is
    1. Is there anyway to overcome come ?
    2. Is there any method to clear off whatever this sso vsj has set ( clear cookies / start new browser instance / etc ) in order to forget the state
    Any idea?
    Thanks

    Yes.
    here to illustrate
    public MyFilter extends VSJAuthFilter
    *public void doFilter(){*
    *if(session.getAttribute("loginSucces") != true){*
    super.doFilter(); //call VSJ Auth filter to perform SSO in order to get User Principal populated.
    *}else{*
    chain.doFilter(); // normal filter
    My Filter only intercepts *.jsp and *.do
    Basically here is the pattern that i observe
    1. If i hit default url (homepage.do) for the first time it will trigger the super.doFilter() , it will then throw 403 and redirect to login.html , after success and go to homepage , subsequent POST parameter is missing
    2. if i hit the external login page directly just to simulate ( eg : login.html ) it wont trigger this filter , after success and go to homepage , subsequenet POST parameter is okay
    3. GET is always ok
    I am using weblogic server 10.x btw
    Thanks

  • Business Service with multiple HTTP Request Methods

    hi all -
    I'm new to OSB and trying to prototype a solution. I have a service provider that exposes a number of HTTP operations (GET/PUT/POST/DELETE). It's a JAX-RS implementation.
    I was looking to create 1 proxy service and 1 business service for that service provider. But, within my business service, I must chose a 'HTTP Request Method' and it allows only 1 type (either GET, PUT, POST, DELETE). So, I have something working, but only for a single type (POST in my prototype). I figure I could create more proxy and business services for the other HTTP Request Methods, but I'm not sure if this is the correct approach (design/architecture).
    My other thought was to create a proxy service to front the service provider, but looking at the documentation, it looks like there should be a business service for each proxy service. If it's possible to use a proxy service without a business service to mediate the service provider, where would I add my URLs for the service provider in the proxy service.
    My apologies on the 2 part architecture/design question. I thought the group would help with getting me started.
    thanks jim

    Hi,
    Frankly I dont know too much on this topic but following links may help you:
    http://help.sap.com/saphelp_nw04/helpdata/en/25/dda73e5b7a424de10000000a114084/frameset.htm
    Troubleshooting ICF: http://help.sap.com/saphelp_nw04/helpdata/en/80/b2dd3a6dac703be10000000a11405a/content.htm
    Possibly experts in this forum will be able to help you:  Application Server->Internet Transaction Server (ITS)
    Regards,
    Gourav

  • Specify file name of the document returned on the HTTP post

    Hello,
    we are submitting a PDF form by calling submitForm function:
    doc.submitForm
            cURL: "http://localhost/script",
            cSubmitAs: "XML"
    The server returnes data of type "Content-type: application/pdf" and as a result this aplication/pdf data is displayed in a new window in Acrobat Reader.
    The document in new window has name e.g. A9R3347.tmp, is it possible to force some concrete name ?
    We tried to send from server the http header:
    Content-Disposition: attachment; filename=\"custom_name.pdf\"
    or   
    Content-Type: application/pdf;         filename=custom_name.pdf
    but non of this works.
    1/ is it possible to set some custom name of the document, which is returned from a server in response of HTTP Post submit ?
    2/ is it possible to return other kind of data then application/pdf ? ( my tests with AR 9.3 with other formats failed).
    Thanks for any advice.

    See Oracle Metalink,
    ..Oracle Portal Technical Forum,
    ....Subject: PORTAL - uploading files (file attachments) with file names.
    This message thread outlines javascript code that automatically captures the filename during an upload.

  • How to send plain text body in HTTP Post method ?

    Hi Exeperts,
    I have a scenario http post - ptoxy. Sender sending the data in http post in plain text body (only field values will be in the body).
    how should i capture this plain text for receiver to map..
    is any udf or xsl code ?
    please guide me for achieving this requirement .
    find the attachment for http post body value.
    Regards
    Ravi

    Hi Mark,
    Thanks for your reply,
    Please share you have any udf  for this .
    can you explain me how should i map to target side.
    what are the configuration should i done in communication channel level
    Regards
    Ravinder.s

Maybe you are looking for