USPS HTTP Post Request












1















Here is the error message I am receiving when I try to run the following Perl code. Any ideas what causing this? It appears it does not like the API=Verify, but it was the only name for the API which returns a 9 digit zip code I could find.



80040B1AAPI Authorization failure. is not a valid API name for this
protocol.USPSCOM::DoAuth



# Perl subroutine for POST Request
#########
sub FindTracking() {
$saddress="60 Passional Way";
$scity="Burnsville";
$szip="27690";
$sstate="NC";
print "start of tracking...<br>";

$queryString = qq~
<?xml version="1.0"?>
https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=
<AddressValidateRequest USERID="xxxxxxx">
<Revision>1</Revision>
<Address ID="0">
<Address1></Address1>
<Address2>$saddress</Address2>
<City>$scity</City>
<State>$sstate</State>
<Zip5>$szip</Zip5>
<Zip4></Zip4>
</Address>
</AddressValidateRequest>
<?xml version="1.0"?>
<AddressValidateResponse><Address ID="0">
<Address2></Address2><City></City><State></State><Zip5></Zip5>
<Zip4></Zip4></Address></AddressValidateResponse>
<Error>
<Number></Number>
<Source></Source>
<Description></Description>
<HelpFile></HelpFile>
<HelpContext></HelpContext>
</Error>
~;

# Instantiate the user agent and set our agent string
$userAgent = new LWP::UserAgent;
$userAgent->agent( 'USPS' );
$queryString =~ s/ /%20/ig;
$request = new HTTP::Request( 'POST',
'https://secure.shippingapis.com/ShippingAPI.dll' );

# Set the content type
$request->content_type( 'text/xml' );

# Set the query string
$request->content( $queryString );

# Make the request
$response = $userAgent->request( $request );
print $response->content();
# Check the status of the request
if ( $response->is_success ) {
$content = $$response{ "_content" };
$TrackingNumber = "";
($success) = $content =~ /<AddressValidateRequest>(.*)
</AddressValidateRequest>/;
print "<br><br>==>some $content<br>";
if ($success eq "Success") {
($TrackingNumber)= $content =~ /<Zip4>(.*)</Zip4>/;
print "here with $TrackingNumber<br>";
}

}
else {
print "<br><br>here with resp=$response<br>req=$request <br>cont
$content";
}
}









share|improve this question



























    1















    Here is the error message I am receiving when I try to run the following Perl code. Any ideas what causing this? It appears it does not like the API=Verify, but it was the only name for the API which returns a 9 digit zip code I could find.



    80040B1AAPI Authorization failure. is not a valid API name for this
    protocol.USPSCOM::DoAuth



    # Perl subroutine for POST Request
    #########
    sub FindTracking() {
    $saddress="60 Passional Way";
    $scity="Burnsville";
    $szip="27690";
    $sstate="NC";
    print "start of tracking...<br>";

    $queryString = qq~
    <?xml version="1.0"?>
    https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=
    <AddressValidateRequest USERID="xxxxxxx">
    <Revision>1</Revision>
    <Address ID="0">
    <Address1></Address1>
    <Address2>$saddress</Address2>
    <City>$scity</City>
    <State>$sstate</State>
    <Zip5>$szip</Zip5>
    <Zip4></Zip4>
    </Address>
    </AddressValidateRequest>
    <?xml version="1.0"?>
    <AddressValidateResponse><Address ID="0">
    <Address2></Address2><City></City><State></State><Zip5></Zip5>
    <Zip4></Zip4></Address></AddressValidateResponse>
    <Error>
    <Number></Number>
    <Source></Source>
    <Description></Description>
    <HelpFile></HelpFile>
    <HelpContext></HelpContext>
    </Error>
    ~;

    # Instantiate the user agent and set our agent string
    $userAgent = new LWP::UserAgent;
    $userAgent->agent( 'USPS' );
    $queryString =~ s/ /%20/ig;
    $request = new HTTP::Request( 'POST',
    'https://secure.shippingapis.com/ShippingAPI.dll' );

    # Set the content type
    $request->content_type( 'text/xml' );

    # Set the query string
    $request->content( $queryString );

    # Make the request
    $response = $userAgent->request( $request );
    print $response->content();
    # Check the status of the request
    if ( $response->is_success ) {
    $content = $$response{ "_content" };
    $TrackingNumber = "";
    ($success) = $content =~ /<AddressValidateRequest>(.*)
    </AddressValidateRequest>/;
    print "<br><br>==>some $content<br>";
    if ($success eq "Success") {
    ($TrackingNumber)= $content =~ /<Zip4>(.*)</Zip4>/;
    print "here with $TrackingNumber<br>";
    }

    }
    else {
    print "<br><br>here with resp=$response<br>req=$request <br>cont
    $content";
    }
    }









    share|improve this question

























      1












      1








      1








      Here is the error message I am receiving when I try to run the following Perl code. Any ideas what causing this? It appears it does not like the API=Verify, but it was the only name for the API which returns a 9 digit zip code I could find.



      80040B1AAPI Authorization failure. is not a valid API name for this
      protocol.USPSCOM::DoAuth



      # Perl subroutine for POST Request
      #########
      sub FindTracking() {
      $saddress="60 Passional Way";
      $scity="Burnsville";
      $szip="27690";
      $sstate="NC";
      print "start of tracking...<br>";

      $queryString = qq~
      <?xml version="1.0"?>
      https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=
      <AddressValidateRequest USERID="xxxxxxx">
      <Revision>1</Revision>
      <Address ID="0">
      <Address1></Address1>
      <Address2>$saddress</Address2>
      <City>$scity</City>
      <State>$sstate</State>
      <Zip5>$szip</Zip5>
      <Zip4></Zip4>
      </Address>
      </AddressValidateRequest>
      <?xml version="1.0"?>
      <AddressValidateResponse><Address ID="0">
      <Address2></Address2><City></City><State></State><Zip5></Zip5>
      <Zip4></Zip4></Address></AddressValidateResponse>
      <Error>
      <Number></Number>
      <Source></Source>
      <Description></Description>
      <HelpFile></HelpFile>
      <HelpContext></HelpContext>
      </Error>
      ~;

      # Instantiate the user agent and set our agent string
      $userAgent = new LWP::UserAgent;
      $userAgent->agent( 'USPS' );
      $queryString =~ s/ /%20/ig;
      $request = new HTTP::Request( 'POST',
      'https://secure.shippingapis.com/ShippingAPI.dll' );

      # Set the content type
      $request->content_type( 'text/xml' );

      # Set the query string
      $request->content( $queryString );

      # Make the request
      $response = $userAgent->request( $request );
      print $response->content();
      # Check the status of the request
      if ( $response->is_success ) {
      $content = $$response{ "_content" };
      $TrackingNumber = "";
      ($success) = $content =~ /<AddressValidateRequest>(.*)
      </AddressValidateRequest>/;
      print "<br><br>==>some $content<br>";
      if ($success eq "Success") {
      ($TrackingNumber)= $content =~ /<Zip4>(.*)</Zip4>/;
      print "here with $TrackingNumber<br>";
      }

      }
      else {
      print "<br><br>here with resp=$response<br>req=$request <br>cont
      $content";
      }
      }









      share|improve this question














      Here is the error message I am receiving when I try to run the following Perl code. Any ideas what causing this? It appears it does not like the API=Verify, but it was the only name for the API which returns a 9 digit zip code I could find.



      80040B1AAPI Authorization failure. is not a valid API name for this
      protocol.USPSCOM::DoAuth



      # Perl subroutine for POST Request
      #########
      sub FindTracking() {
      $saddress="60 Passional Way";
      $scity="Burnsville";
      $szip="27690";
      $sstate="NC";
      print "start of tracking...<br>";

      $queryString = qq~
      <?xml version="1.0"?>
      https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=
      <AddressValidateRequest USERID="xxxxxxx">
      <Revision>1</Revision>
      <Address ID="0">
      <Address1></Address1>
      <Address2>$saddress</Address2>
      <City>$scity</City>
      <State>$sstate</State>
      <Zip5>$szip</Zip5>
      <Zip4></Zip4>
      </Address>
      </AddressValidateRequest>
      <?xml version="1.0"?>
      <AddressValidateResponse><Address ID="0">
      <Address2></Address2><City></City><State></State><Zip5></Zip5>
      <Zip4></Zip4></Address></AddressValidateResponse>
      <Error>
      <Number></Number>
      <Source></Source>
      <Description></Description>
      <HelpFile></HelpFile>
      <HelpContext></HelpContext>
      </Error>
      ~;

      # Instantiate the user agent and set our agent string
      $userAgent = new LWP::UserAgent;
      $userAgent->agent( 'USPS' );
      $queryString =~ s/ /%20/ig;
      $request = new HTTP::Request( 'POST',
      'https://secure.shippingapis.com/ShippingAPI.dll' );

      # Set the content type
      $request->content_type( 'text/xml' );

      # Set the query string
      $request->content( $queryString );

      # Make the request
      $response = $userAgent->request( $request );
      print $response->content();
      # Check the status of the request
      if ( $response->is_success ) {
      $content = $$response{ "_content" };
      $TrackingNumber = "";
      ($success) = $content =~ /<AddressValidateRequest>(.*)
      </AddressValidateRequest>/;
      print "<br><br>==>some $content<br>";
      if ($success eq "Success") {
      ($TrackingNumber)= $content =~ /<Zip4>(.*)</Zip4>/;
      print "here with $TrackingNumber<br>";
      }

      }
      else {
      print "<br><br>here with resp=$response<br>req=$request <br>cont
      $content";
      }
      }






      perl http






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 25 '18 at 0:48









      BiopacBiopac

      112




      112
























          2 Answers
          2






          active

          oldest

          votes


















          -1














          Change your query XML to:



          $queryString = qq~
          <AddressValidateRequest USERID="xxxxxxxxxxx">
          <Revision>1</Revision>
          <Address ID="0">
          <Address1></Address1>
          <Address2>$saddress</Address2>
          <City>$scity</City>
          <State>$sstate</State>
          <Zip5>$szip</Zip5>
          <Zip4></Zip4>
          </Address>
          </AddressValidateRequest>
          ~;


          Then build the request as a GET instead of a POST:



          $userAgent = new LWP::UserAgent;
          $userAgent->agent( 'USPS' );
          $url = "https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=$queryString";

          $request = new HTTP::Request( 'GET', $url );





          share|improve this answer































            1














            To start, you have an invalid query string. Compare what you are doing to the USPS WebTools example and remove what they don't show. Be sure that you are setting your USERID properly (and not using 'xxxxxxx'); an environment variable is handy there.



            Or, you can try using the Business::USPS::WebTools module from GitHub. It implements the Zip Code Lookup.






            share|improve this answer


























            • I am using my proper ID. Can you tell me where the query string is invalid?

              – Biopac
              Nov 25 '18 at 16:13











            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463740%2fusps-http-post-request%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            -1














            Change your query XML to:



            $queryString = qq~
            <AddressValidateRequest USERID="xxxxxxxxxxx">
            <Revision>1</Revision>
            <Address ID="0">
            <Address1></Address1>
            <Address2>$saddress</Address2>
            <City>$scity</City>
            <State>$sstate</State>
            <Zip5>$szip</Zip5>
            <Zip4></Zip4>
            </Address>
            </AddressValidateRequest>
            ~;


            Then build the request as a GET instead of a POST:



            $userAgent = new LWP::UserAgent;
            $userAgent->agent( 'USPS' );
            $url = "https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=$queryString";

            $request = new HTTP::Request( 'GET', $url );





            share|improve this answer




























              -1














              Change your query XML to:



              $queryString = qq~
              <AddressValidateRequest USERID="xxxxxxxxxxx">
              <Revision>1</Revision>
              <Address ID="0">
              <Address1></Address1>
              <Address2>$saddress</Address2>
              <City>$scity</City>
              <State>$sstate</State>
              <Zip5>$szip</Zip5>
              <Zip4></Zip4>
              </Address>
              </AddressValidateRequest>
              ~;


              Then build the request as a GET instead of a POST:



              $userAgent = new LWP::UserAgent;
              $userAgent->agent( 'USPS' );
              $url = "https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=$queryString";

              $request = new HTTP::Request( 'GET', $url );





              share|improve this answer


























                -1












                -1








                -1







                Change your query XML to:



                $queryString = qq~
                <AddressValidateRequest USERID="xxxxxxxxxxx">
                <Revision>1</Revision>
                <Address ID="0">
                <Address1></Address1>
                <Address2>$saddress</Address2>
                <City>$scity</City>
                <State>$sstate</State>
                <Zip5>$szip</Zip5>
                <Zip4></Zip4>
                </Address>
                </AddressValidateRequest>
                ~;


                Then build the request as a GET instead of a POST:



                $userAgent = new LWP::UserAgent;
                $userAgent->agent( 'USPS' );
                $url = "https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=$queryString";

                $request = new HTTP::Request( 'GET', $url );





                share|improve this answer













                Change your query XML to:



                $queryString = qq~
                <AddressValidateRequest USERID="xxxxxxxxxxx">
                <Revision>1</Revision>
                <Address ID="0">
                <Address1></Address1>
                <Address2>$saddress</Address2>
                <City>$scity</City>
                <State>$sstate</State>
                <Zip5>$szip</Zip5>
                <Zip4></Zip4>
                </Address>
                </AddressValidateRequest>
                ~;


                Then build the request as a GET instead of a POST:



                $userAgent = new LWP::UserAgent;
                $userAgent->agent( 'USPS' );
                $url = "https://secure.shippingapis.com/ShippingAPI.dll?API=Verify&XML=$queryString";

                $request = new HTTP::Request( 'GET', $url );






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 26 '18 at 0:55









                supernickmansupernickman

                142




                142

























                    1














                    To start, you have an invalid query string. Compare what you are doing to the USPS WebTools example and remove what they don't show. Be sure that you are setting your USERID properly (and not using 'xxxxxxx'); an environment variable is handy there.



                    Or, you can try using the Business::USPS::WebTools module from GitHub. It implements the Zip Code Lookup.






                    share|improve this answer


























                    • I am using my proper ID. Can you tell me where the query string is invalid?

                      – Biopac
                      Nov 25 '18 at 16:13
















                    1














                    To start, you have an invalid query string. Compare what you are doing to the USPS WebTools example and remove what they don't show. Be sure that you are setting your USERID properly (and not using 'xxxxxxx'); an environment variable is handy there.



                    Or, you can try using the Business::USPS::WebTools module from GitHub. It implements the Zip Code Lookup.






                    share|improve this answer


























                    • I am using my proper ID. Can you tell me where the query string is invalid?

                      – Biopac
                      Nov 25 '18 at 16:13














                    1












                    1








                    1







                    To start, you have an invalid query string. Compare what you are doing to the USPS WebTools example and remove what they don't show. Be sure that you are setting your USERID properly (and not using 'xxxxxxx'); an environment variable is handy there.



                    Or, you can try using the Business::USPS::WebTools module from GitHub. It implements the Zip Code Lookup.






                    share|improve this answer















                    To start, you have an invalid query string. Compare what you are doing to the USPS WebTools example and remove what they don't show. Be sure that you are setting your USERID properly (and not using 'xxxxxxx'); an environment variable is handy there.



                    Or, you can try using the Business::USPS::WebTools module from GitHub. It implements the Zip Code Lookup.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 25 '18 at 4:52

























                    answered Nov 25 '18 at 4:44









                    brian d foybrian d foy

                    102k27169475




                    102k27169475













                    • I am using my proper ID. Can you tell me where the query string is invalid?

                      – Biopac
                      Nov 25 '18 at 16:13



















                    • I am using my proper ID. Can you tell me where the query string is invalid?

                      – Biopac
                      Nov 25 '18 at 16:13

















                    I am using my proper ID. Can you tell me where the query string is invalid?

                    – Biopac
                    Nov 25 '18 at 16:13





                    I am using my proper ID. Can you tell me where the query string is invalid?

                    – Biopac
                    Nov 25 '18 at 16:13


















                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463740%2fusps-http-post-request%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown