2009-09-30 25 views
6

Attualmente sto cercando di sviluppare un'applicazione per caricare file su un bucket Amazon S3 utilizzando cURL e C++. Dopo aver letto attentamente la guida agli sviluppatori S3, ho iniziato a implementare la mia applicazione utilizzando cURL e formando l'intestazione come descritto nella guida degli sviluppatori e dopo un sacco di prove ed errori per determinare il modo migliore per creare la firma S3, ora sto affrontando un errore 501 . L'intestazione ricevuta suggerisce che il metodo che sto usando non è implementato. Non sono sicuro dove ho sbagliato, ma qui è l'intestazione HTTP che sto inviando ad Amazon:Caricamento su Amazon S3 utilizzando cURL/libcurl

PUT /test1.txt HTTP/1.1 
Accept: */* 
Transfer-Encoding: chunked 
Content-Type: text/plain 
Content-Length: 29 
Host: [BucketName].s3.amazonaws.com 
Date: [Date] 
Authorization: AWS [Access Key ID]:[Signature] 
Expect: 100-continue 

ho troncato il nome Secchio, chiave di accesso ID e firma per motivi di sicurezza.

Non sono sicuro di ciò che sto facendo male, ma penso che l'errore stia generando i campi Accept e Transfer-Encoding (Not Really Sure). Così qualcuno può dirmi che cosa sto facendo male o perché sto ottenendo un 501.

+0

risolto: mancava un CURLOPT per la dimensione del file nel mio codice e ora tutto è perfettamente funzionante –

risposta

-1

Risolto: mancava un CURLOPT per la dimensione del file nel mio codice e ora tutto è perfettamente funzionante

+3

Quale opzione? Come sono cambiate le intestazioni? –

+0

Non capisco mai perché la gente risponde con le risposte sulla falsariga di "Oh, l'ho capito, ma non ho intenzione di dirti cosa ho fatto per risolverlo anche se hai passato del tempo a cercare di aiutarmi", spiega la tua soluzione , altrimenti stai sprecando il tempo della gente. –

3

Si potrebbe eseguire un file bash. Ecco un esempio upload.sh script che si poteva solo correre come: sh upload.sh yourfile

#!/bin/bash 
file=$1 
bucket=YOUR_BUCKET 
resource="/${bucket}/${file}" 
contentType="application/x-itunes-ipa" 
dateValue=`date -R` 
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}" 
s3Key=YOUR_KEY_HERE 
s3Secret=YOUR_SECRET 
echo "SENDING TO S3" 
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64` 
curl -vv -X PUT -T "${file}" \ 
-H "Host: ${bucket}.s3.amazonaws.com" \ 
-H "Date: ${dateValue}" \ 
-H "Content-Type: ${contentType}" \ 
-H "Authorization: AWS ${s3Key}:${signature}" \ 
https://${bucket}.s3.amazonaws.com/${file} 

più: http://www.jamesransom.net/?p=58

http://www.jamesransom.net/?p=58

+0

Grazie, ma questa domanda era di cinque anni fa ed è per Windows come suggerisce il tag. –

Problemi correlati