Question:
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-Erik
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
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
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.
Erik, I found the problem -- and it only affects the ActiveX implementation. I'll have a fix this weekend.