Archived Forum Post

Index of archived forum posts

Question:

bug in http extra spaces added to end of path

May 06 '13 at 18:30

I found a bug in the active x http component. When I create a request object for HEAD and PUT requests the component is adding 4 additional spaces to the end of the path string.

Here is my vb6 code.

Function CheckContainer(ID As Long, Y As Single, M As Single, tContainer As String) As String
            Dim Container As String
            Dim oResp As CHILKATHTTPLib.ChilkatHttpResponse
            Dim oReq As New CHILKATHTTPLib.ChilkatHttpRequest
            Dim I As Single
            Static ErrCount As Single

'XML Snippet attached

Container = xApp.ChilkatPath("HTTP|BaseContainer|*")
Container = Replace(Container, "~~Year~~", Y)
Container = Replace(Container, "~~AgencyID~~", ID)
Container = Replace(Container, "~~Month~~", M)

Debug.Print Len(Container)   'Returns 21
Debug.Print Container        'Returns IssueArchive-1-2013-4

Container = Trim(Container)
Debug.Print Len(Container)   'Returns 21

With oReq
    .HttpVerb = "HEAD"
    .ContentType = ""
    .AddHeader "Host", "storage.clouddrive.com"
    .AddHeader "X-Auth-Token", RS_AuthToken
    .Path = RS_StorageURL & "/" & Container

End With

oHttp.SessionLogFilename = "C:\oHttp_Log_head.txt"

Set oResp = oHttp.SynchronousRequest(RS_Server, 443, 1, oReq)
If Not oResp Is Nothing Then Exit For

Select Case oResp.StatusCode
Case 201
    Debug.Print oResp.Header

Case 204   'Exists
    CheckContainer = Container

Case 404 'Not Found
    oReq.Path = RS_StorageURL & "/" & Container
    oReq.HttpVerb = "PUT"
    oReq.ContentType = "text/plain"

    Set oResp = oHttp.SynchronousRequest(RS_Server, 443, 1, oReq)

    If oResp.StatusCode = 201 Then   'Created
        CheckContainer = Container

    Else
        Stop

    End If

Case Else
    Debug.Print "Response Status"
    Debug.Print oResp.StatusCode

    Debug.Print "Response Headers"
    Debug.Print oResp.Header        
    Stop

End Select
Set oReq = Nothing
Set oResp = Nothing

End Function

Here is the HTTP Log, you will see the %20 for each space that was added

---- Sending ----
HEAD /v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4%20%20%20%20 HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: 7e9f4a42-b307-4a10-88c4-2c23125ddb21

---- Received ---- HTTP/1.1 404 Not Found Content-Length: 0 Content-Type: text/html; charset=UTF-8 X-Trans-Id: tx9b2bd29266064b8bb18c08ca8ef75429 Date: Mon, 29 Apr 2013 20:32:25 GMT

---- Sending ---- PUT /v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4%20%20%20%20 HTTP/1.1 Host: storage.clouddrive.com X-Auth-Token: 7e9f4a42-b307-4a10-88c4-2c23125ddb21

---- Received ---- HTTP/1.1 201 Created Content-Length: 0 Content-Type: text/html; charset=UTF-8 X-Trans-Id: tx3452f9d142a540ea8e42373b80f845eb Date: Mon, 29 Apr 2013 20:32:40 GMT

Update: Here is the .LastErrorText, in my debug window I see the 4 spaces. Here if you highlight the line for the path, you will the extra spaces.

ChilkatLog:
  SynchronousRequest:
    DllDate: Dec 12 2012
    UnlockPrefix: INSURAHttp
    Username: MATHIS:erik
    Architecture: Little Endian; 32-bit
    Language: ActiveX
    VerboseLogging: 0
    domain: storage101.dfw1.clouddrive.com
    port: 443
    ssl: 1
    RequestData:
      HttpVersion: 1.1
      Verb: HEAD
      Path: /v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4  
Charset: windows-1252 SendCharset: 0 MimeHeader: Host: storage.clouddrive.com X-Auth-Token: 7e9f4a42-b307-4a10-88c4-2c23125ddb21 --RequestData ReadTimeout: 20 ConnectTimeout: 10 httpConnect: hostname: storage101.dfw1.clouddrive.com port: 443 ssl: 1 Need to establish connection to the HTTP server... ConnectTimeoutMs_1: 10000 calling ConnectSocket2 IPV6 enabled connect with NO heartbeat. connectingTo: storage101.dfw1.clouddrive.com resolveHostname1: dnsCacheLookup: storage101.dfw1.clouddrive.com Resolving domain name (IPV4) --resolveHostname1 GetHostByNameHB_ipv4: Elapsed time: 31 millisec myIP_1: 8.0.0.3 myPort_1: 2461 connect successful (1) clientHelloMajorMinorVersion: 3.1 buildClientHello: majorVersion: 3 minorVersion: 1 numRandomBytes: 32 sessionIdSize: 0 numCipherSuites: 10 numCompressionMethods: 1 --buildClientHello readIncomingTls_serverHello: processTlsRecord: processHandshake: handshakeMessageType: ServerHello handshakeMessageLen: 0x46 processHandshakeMessage: MessageType: ServerHello Processing ServerHello... ServerHello: MajorVersion: 3 MinorVersion: 1 SessionIdLen: 32 CipherSuite: RSA_WITH_RC4_128_SHA CipherSuite: 00,05 CompressionMethod: 0 Queueing ServerHello message. ServerHello is OK. --ServerHello --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_serverHello HandshakeQueue: MessageType: ServerHello --HandshakeQueue Dequeued ServerHello message. readIncomingTls_6: processTlsRecord: processHandshake: handshakeMessageType: Certificate handshakeMessageLen: 0xd44 processHandshakeMessage: MessageType: Certificate ProcessCertificates: Certificate: derSize: 1116 certSubjectCN: storage101.dfw1.clouddrive.com certSerial: 75CCB8F7011B14EBA0253E92D7EA124E certIssuerCN: Thawte DV SSL CA --Certificate Certificate: derSize: 1171 certSubjectCN: Thawte DV SSL CA certSerial: 7610128A17B682BB3A1F9D1A9A35C092 certIssuerCN: thawte Primary Root CA --Certificate Certificate: derSize: 1097 certSubjectCN: thawte Primary Root CA certSerial: 3365500879AD73E230B9E01D0D7FAC91 certIssuerCN: Thawte Premium Server CA --Certificate NumCertificates: 3 Queueing Certificates message... --ProcessCertificates --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_6 Dequeued Certificate message. readIncomingTls_6: processTlsRecord: processHandshake: handshakeMessageType: ServerHelloDone handshakeMessageLen: 0x0 processHandshakeMessage: MessageType: ServerHelloDone Queueing HelloDone message. --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_6 DequeuedMessageType: ServerHelloDone OK to ServerHelloDone! No client certificate required by the server. Encrypted pre-master secret with server certificate RSA public key is OK. Sending ClientKeyExchange... Sent ClientKeyExchange message. Sending ChangeCipherSpec... Sent ChangeCipherSpec message. Derived keys. Installed new outgoing security params. Sending FINISHED message.. algorithm: arc4 keyLength: 128 Sent FINISHED message.. readIncomingTls_changeCipherSpec2: processTlsRecord: processChangeCipherSpec: ccsProtocolType: 1 --processChangeCipherSpec --processTlsRecord --readIncomingTls_changeCipherSpec2 readIncomingTls_handshakeFinished2: processTlsRecord: processHandshake: handshakeMessageType: HandshakeFinished handshakeMessageLen: 0xc processHandshakeMessage: MessageType: HandshakeFinished FinishedMsgLen: 12 Queueing Finished message. --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_handshakeFinished2 Dequeue the FINISHED message... Dequeued Finished message. Handshake completed successfully. Secure Channel Established. Connected --httpConnect connectTime1: Elapsed time: 265 millisec sendRequestGetResponse_1: sendRequest: Not auto-adding cookies. --sendRequest sendRequestTime: Elapsed time: 16 millisec ---- Reading HTTP Response ---- readResponse2_4: Finished reading 204 header-only response. readResponseTime: Elapsed time: 47 millisec --readResponse2_4 processResponse_3: responseStatus: 204 --processResponse_3 --sendRequestGetResponse_1 totalTime: Elapsed time: 328 millisec Success. --SynchronousRequest --ChilkatLog

-Erik

XML Snippet

5/1/2013 Here is the results from the pre-release of chilkathttp.dll

GetLastErrorText for path

ChilkatLog:
  Path:
    DllDate: Apr 30 2013
    ChilkatVersion: 9.4.1.12
    UnlockPrefix: INSURAHttp
    Username: MATHIS:erik
    Architecture: Little Endian; 32-bit
    Language: ActiveX
    VerboseLogging: 0
    path: [/v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4]
  --Path
--ChilkatLog

GetLastErrorText for SynchronousRequest

ChilkatLog:
  SynchronousRequest:
    DllDate: Apr 30 2013
    ChilkatVersion: 9.4.1.12
    UnlockPrefix: INSURAHttp
    Username: MATHIS:erik
    Architecture: Little Endian; 32-bit
    Language: ActiveX
    VerboseLogging: 0
    domain: storage101.dfw1.clouddrive.com
    port: 443
    ssl: 1
    RequestData:
      HttpVersion: 1.1
      Verb: HEAD
      Path: /v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4  
Charset: windows-1252 SendCharset: 0 MimeHeader: Host: storage.clouddrive.com X-Auth-Token: 89f16511-5448-4431-9b63-000ba33d8910 --RequestData ReadTimeout: 20 ConnectTimeout: 10 path: [/v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4 ] httpConnect: hostname: storage101.dfw1.clouddrive.com port: 443 ssl: 1 Need to establish connection to the HTTP server... ConnectTimeoutMs_1: 10000 calling ConnectSocket2 IPV6 enabled connect with NO heartbeat. connectingTo: storage101.dfw1.clouddrive.com resolveHostname1: Resolving domain name (IPV4) via gethostbyname --resolveHostname1 GetHostByNameHB_ipv4: Elapsed time: 0 millisec myIP_1: 8.0.0.3 myPort_1: 3416 connect successful (1) clientHelloMajorMinorVersion: 3.1 buildClientHello: majorVersion: 3 minorVersion: 1 numRandomBytes: 32 sessionIdSize: 0 numCipherSuites: 10 numCompressionMethods: 1 --buildClientHello readIncomingTls_serverHello: processTlsRecord: processHandshake: handshakeMessageType: ServerHello handshakeMessageLen: 0x46 processHandshakeMessage: MessageType: ServerHello Processing ServerHello... ServerHello: MajorVersion: 3 MinorVersion: 1 SessionIdLen: 32 CipherSuite: RSA_WITH_RC4_128_SHA CipherSuite: 00,05 CompressionMethod: 0 Queueing ServerHello message. ServerHello is OK. --ServerHello --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_serverHello HandshakeQueue: MessageType: ServerHello --HandshakeQueue Dequeued ServerHello message. readIncomingTls_6: processTlsRecord: processHandshake: handshakeMessageType: Certificate handshakeMessageLen: 0xd44 processHandshakeMessage: MessageType: Certificate ProcessCertificates: Certificate: derSize: 1116 certSubjectCN: storage101.dfw1.clouddrive.com certSerial: 75CCB8F7011B14EBA0253E92D7EA124E certIssuerCN: Thawte DV SSL CA --Certificate Certificate: derSize: 1171 certSubjectCN: Thawte DV SSL CA certSerial: 7610128A17B682BB3A1F9D1A9A35C092 certIssuerCN: thawte Primary Root CA --Certificate Certificate: derSize: 1097 certSubjectCN: thawte Primary Root CA certSerial: 3365500879AD73E230B9E01D0D7FAC91 certIssuerCN: Thawte Premium Server CA --Certificate NumCertificates: 3 Queueing Certificates message... --ProcessCertificates --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_6 Dequeued Certificate message. readIncomingTls_6: processTlsRecord: processHandshake: handshakeMessageType: ServerHelloDone handshakeMessageLen: 0x0 processHandshakeMessage: MessageType: ServerHelloDone Queueing HelloDone message. --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_6 DequeuedMessageType: ServerHelloDone OK to ServerHelloDone! No client certificate required by the server. Encrypted pre-master secret with server certificate RSA public key is OK. Sending ClientKeyExchange... Sent ClientKeyExchange message. Sending ChangeCipherSpec... Sent ChangeCipherSpec message. Derived keys. Installed new outgoing security params. Sending FINISHED message.. algorithm: arc4 keyLength: 128 Sent FINISHED message.. readIncomingTls_changeCipherSpec2: processTlsRecord: processChangeCipherSpec: ccsProtocolType: 1 --processChangeCipherSpec --processTlsRecord --readIncomingTls_changeCipherSpec2 readIncomingTls_handshakeFinished2: processTlsRecord: processHandshake: handshakeMessageType: HandshakeFinished handshakeMessageLen: 0xc processHandshakeMessage: MessageType: HandshakeFinished FinishedMsgLen: 12 Queueing Finished message. --processHandshakeMessage --processHandshake --processTlsRecord --readIncomingTls_handshakeFinished2 Dequeue the FINISHED message... Dequeued Finished message. Handshake completed successfully. Secure Channel Established. Connected --httpConnect connectTime1: Elapsed time: 234 millisec sendRequestGetResponse_1: sendRequest: Not auto-adding cookies. --sendRequest sendRequestTime: Elapsed time: 16 millisec ---- Reading HTTP Response ---- readResponse2_4: Finished reading 204 header-only response. readResponseTime: Elapsed time: 62 millisec --readResponse2_4 processResponse_3: responseStatus: 204 --processResponse_3 --sendRequestGetResponse_1 totalTime: Elapsed time: 312 millisec Success. --SynchronousRequest --ChilkatLog

Http Log

---- Sending ----
HEAD /v1/MossoCloudFS_56e9ae2f-a3f9-4d5b-a211-406d4b093bad/IssueArchive-1-2013-4%20%20%20%20 HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: 89f16511-5448-4431-9b63-000ba33d8910

---- Received ---- HTTP/1.1 204 No Content Content-Length: 0 X-Container-Object-Count: 0 Accept-Ranges: bytes X-Timestamp: 1367264681.90137 X-Container-Bytes-Used: 0 Content-Type: text/plain; charset=utf-8 X-Trans-Id: tx463fc6cd19274bd8ae41231a23259a60 Date: Wed, 01 May 2013 18:33:39 GMT


Accepted Answer

This new build should fix it:
http://www.chilkatsoft.com/preRelease/ChilkatHttp.zip


Answer

My guess is that you're setting the HttpRequest.Path property equal to a string that ends in 4 SPACE chars. This would explain the problem. Verify the exact string use to set oReq.Path.

In other words, this line of code is probably the problem:

.Path = RS_StorageURL & "/" & Container

I suspect Container is a string that ends in 4 SPACE chars.


Answer

Erik, I found the problem -- and it only affects the ActiveX implementation. I'll have a fix this weekend.