troubleshooting Question

MS Access VBA How To Properly Set Up A multipart/related HTTP Request

Avatar of Dustin Stanley
Dustin Stanley asked on
Web Languages and StandardsMicrosoft OfficeMicrosoft AccessProgrammingWeb Development
12 Comments2 Solutions671 ViewsLast Modified:
I need help in setting up a proper multipart/related HTTP request in VBA. If you can PLEASE show me samples in VBA of one.  A picture (Or Code) is worth a thousand words.

Here is my code for sending XML over HTTP currently:

Option Compare Database
Option Explicit

Public Function EbaySenderXmlAddFixedPriceItems()
Dim reader As New MSXML2.XMLHTTP40
    Dim doc As New MSXML2.DOMDocument 'If you want to load the XML Document instead of creating it.
    Dim TokenValue As String
    Dim APICALL As String
    
    '*************************************************************************************************************
    'API Call Name!
    '*************************************************************************************************************
      APICALL = "uploadFile" 'Place the API Call Name here within the parenthesis.
    '*************************************************************************************************************
    'Place Token Value Here Below!
    TokenValue = "TOKEN GOES HERE Like ujhuhuaeuyaeyayuo8i"
    '*************************************************************************************************************
    doc.Load "C:\Users\Station\Documents\Access XML Save Files\uploadFile.xml" 'Document Location of the XML File With Items Being Added
   
   
    '*************************************************************************************************************
    'Set The Headers Up!
    '*************************************************************************************************************
    reader.Open "POST", "https://storage.sandbox.ebay.com/FileTransferService", False
    reader.setRequestHeader "Content-ID", "<0.urn.uuid:FileAttachment UUID Here>" 'Must include FileAttachment UUID that matches the FileAttachment UUID!
    reader.setRequestHeader "X-EBAY-SOA-OPERATION-NAME", APICALL 'API Call Name
    reader.setRequestHeader "X-EBAY-SOA-SECURITY-TOKEN", TokenValue ' This is your Highly Secret Token. Place the Token above in the code where it says "Place Token Value Here!".
    reader.setRequestHeader "X-EBAY-SOA-SERVICE-VERSION", "1.5.0" 'Usually never have to change this unless if there is an update.
    reader.setRequestHeader "X-EBAY-API-SITEID", "0" ' 0 is for the USA Site!
    reader.setRequestHeader "X-EBAY-API-DEV-NAME", "Dev Name Here" 'Developers Name Code.
    reader.setRequestHeader "X-EBAY-API-APP-NAME", "App Name Here" 'Applications Name Code.
    reader.setRequestHeader "X-EBAY-API-CERT-NAME", "Certificate Name Here" 'Certificate Name Code.
    
    '*************************************************************************************************************
    'Use The Code After The Example Below To Build The XML File Instead Of Loading An Already Existing One!
    '*************************************************************************************************************
    'Expected OutPut Example!
    '**************************
    
    '<?xml version="1.0" encoding="UTF-8"?>
'<uploadFileRequest xmlns="http://www.ebay.com/marketplace/services">
  '<!-- Call-specific Input Fields -->
  '<fileAttachment> FileAttachment
    '<Data><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:urn:uuid:FileAttachment UUID Here"/></Data>
    '<Size>15</Size>
  '</fileAttachment>
  '<fileFormat>gzip</fileFormat>
  '<fileReferenceId>FILE REFRENCE ID HERE</fileReferenceId>
  '<taskReferenceId>JOB ID HERE</taskReferenceId>
'</uploadFileRequest>
'*************************************************************************************************************
    'Dim uploadFile As String 'If you want to create the XML Document instead of loading it.
   
    
    'uploadFile = ""
    'uploadFile = uploadFile & "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbNewLine
    'uploadFile = uploadFile & "<fileAttachment>" & vbNewLine
    'uploadFile = uploadFile & "<Data><xop:Include xmlns:xop=""http://www.w3.org/2004/08/xop/include"" href=""cid:urn:uuid:9eda0520-1a27-11e7-93ae-92361f002671""/></Data>" & vbNewLine
    'uploadFile = uploadFile & "<Size>15</Size>"
    'uploadFile = uploadFile & "<fileFormat>gzip</fileFormat>" & vbNewLine
    'uploadFile = uploadFile & "<fileReferenceId>50015247856</fileReferenceId>" & vbNewLine
    'uploadFile = uploadFile & "<taskReferenceId>50012765386</taskReferenceId>" & vbNewLine
    'uploadFile = uploadFile & "</uploadFileRequest>"
    
       'MsgBox uploadFile 'Shows MessageBox of the created XML file above.
         'reader.send uploadFile 'This sends the XML document from above that was created.

    '*************************************************************************************************************
    
    reader.send doc 'This sends the XML document from above that was loaded.
    
    
Do Until reader.ReadyState = 4
        DoEvents
    Loop
    
    MsgBox (reader.responseText) 'Shows MessageBox of the Servers Response. ie...Success or Error!
    
    If reader.Status = 200 Then
        Set doc = reader.responseXML
        doc.Save "C:\Users\Station\Documents\Access XML Save Files\New Testing\eBayReturnFile.xml" 'This is the return response from ebay after the document is sent and they process it.
         'MsgBox "PERFECT JUST LIKE YOU :)"
        
        Application.ImportXML "C:\Users\Station\Documents\Access XML Save Files\New Testing\eBayReturnFile.xml", acStructureAndData
        
    Else
        MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & _
   VBE.ActiveCodePane.CodeModule, vbOKOnly, "Error"
    End If
    Set reader = Nothing
End Function



This next code is in PHP (I think but I'm not sure.) but I need my VBA to be set up similiar:
-----------START-----------
 POST https://storage.sandbox.ebay.com/FileTransferService
 Accept-Encoding: gzip, deflate
 X-EBAY-SOA-OPERATION-NAME: uploadFile
 Accept: */*
 X-EBAY-SOA-SERVICE-VERSION: 1.1.0
 X-EBAY-SOA-SERVICE-NAME: FileTransferService
 Content-Length: 3936
 Connection: keep-alive
 Content-Type: multipart/related; boundary=MIME_boundary; type="application/xop+xml"; start="<0.urn:uuid:b2e95d5c-54ed-46ad-b479-fed744f2b8ca>"; start-info="text/xml"
 User-Agent: python-requests/2.5.1 CPython/3.3.4 Darwin/14.0.0
 X-EBAY-SOA-SECURITY-TOKEN: **MYSANDBOXTOKEN**
 
 
 --MIME_boundary
 Content-Type: application/xop+xml; charset=UTF-8; type="text/xml; charset=UTF-8"
 Content-Transfer_Encoding: binary
 Content-ID: <0.urn:uuid:b2e95d5c-54ed-46ad-b479-fed744f2b8ca>
 
 <uploadFileRequest xmlns:sct="http://www.ebay.com/soaframework/common/types" xmlns="http://www.ebay.com/marketplace/services">
 <taskReferenceId>50008909051</taskReferenceId>
 <fileReferenceId>50009059491</fileReferenceId>
 <fileFormat>gzip</fileFormat>
 <fileAttachment>
 <Size>3121</Size>
 <Data><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:urn:uuid:034d5afc-e1ac-4158-afab-8aae07e1423c"/></Data>
 </fileAttachment>
 </uploadFileRequest>
 
 
 --MIME_boundary
 Content-Type: application/octet-stream
 Content-Transfer-Encoding: base64
 Content-ID: <urn:uuid:034d5afc-e1ac-4158-afab-8aae07e1423c>
 
 H4sIALnxy1QC/60YaXPixvL7/go9f8l7S9biFmxpVU9c5gZzm1QqNWgGaUAH1owA+denR+IQttkkVdkqLzN9X9  **... MORE ENCODED DATA ....** PZ/vc0wdv/LK3Rj3bRphsdvlxJT+c58l0olS58V7G1JiQXaioJin7Iu/frHXwTk+//fvgnOnxkwFsUAAA=
 --MIME_boundary--
 

Thank you for the help!
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 2 Answers and 12 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 2 Answers and 12 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros