Requests: Amazon S3 рдореЗрдВ `PUT` рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЬреБрд▓ре░ 2015  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдореИрдВ рдкрд╛рдЗрдерди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдореЗрдЬрд╝реЕрди рдПрд╕ 3 рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдкрд╛рдпрдерди v2.7.9 рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдз v2.7 рд╣реИ)ред рдХрд░реНрд▓ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

curl --request PUT --upload-file img.png https://mybucket-dev.s3.amazonaws.com/6b89e187-26fa-11e5-a04f-a45e60d45b53?Signature=Ow%3D&Expires=1436595966&AWSAccessKeyId=AQ

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде 403 рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛:

<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

рдореИрдВрдиреЗ рдЬреЛ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд╡рд╣ рдпрд╣рд╛рдВ рд╣реИ:

url = https://mybucket-dev.s3.amazonaws.com/6b89e187-26fa-11e5-a04f-a45e60d45b53?Signature=Ow%3D&Expires=1436595966&AWSAccessKeyId=AQ
headers = {'Content-Length': '52369', 'Host': 'mybucket-dev.s3.amazonaws.com', 'Expect': '100-continue', 'Accept': '*/*', 'User-Agent': 'curl/7.37.1'}
payload={'Expires': '1436595966', 'AWSAccessKeyId': 'AQ', 'Signature': 'Ow%3D'}

requests.put(url, files={'file': base64_encoded_image})
requests.put(url, files={'upload_file': base64_encoded_image})
requests.put(url, files={'file': base64_encoded_image}, headers=headers)
requests.put(url, files={'file': base64_encoded_image}, headers=headers, data=payload)

рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡рд░реНрдмреЛрдЬрд╝ рдореЛрдб рдореЗрдВ рдХрд░реНрд▓ рд╣реИ:

* Hostname was NOT found in DNS cache
*   Trying 54.231.168.134...
* Connected to mybucket-dev.s3.amazonaws.com (54.231.168.134) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: *.s3.amazonaws.com
* Server certificate: VeriSign Class 3 Secure Server CA - G3
* Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5
> PUT /6b89e187-26fa-11e5-a04f-a45e60d45b53?Signature=Ow%3D&Expires=1436595966&AWSAccessKeyId=AQ HTTP/1.1
> User-Agent: curl/7.37.1
> Host: mybucket-dev.s3.amazonaws.com
> Accept: */*
> Content-Length: 52369
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< x-amz-id-2: 5lLCQ3FVrTBg2vkyk44E+MecQJb2OGiloO0+2pKePtxPgZptKECNlUyYN43sl4LBNe9f8idh/cc=
< x-amz-request-id: 636A24D53DEB5215
< Date: Fri, 10 Jul 2015 12:04:44 GMT
< ETag: "5802130d4320b56a72afe720e2c323a7"
< Content-Length: 0
* Server AmazonS3 is not blacklisted
< Server: AmazonS3
<
* Connection #0 to host mybucket-dev.s3.amazonaws.com left intact

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рддреЛ, рдореИрдВрдиреЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЫрд╡рд┐ рдмрдирд╛рдИ рдФрд░ рдХрд┐рдпрд╛

curl --request PUT --upload-file img.png https://httpbin.org/put

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд░реНрд▓ рдареАрдХ рд╡рд╣реА рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА (рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ files= рдкреИрд░рд╛рдореАрдЯрд░ multipart/form-data рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЕрдкрд░рд┐рд╖реНрдХреГрдд рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдбред рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

with open('img.png', 'rb') as data:
    requests.put(url, data=data)

рдЕрдиреБрд░реЛрдз рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЦреИрд░, рдЪрд░рдг 1 рднреЗрдЬрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ Expect: 100 Continue ред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддреЗред рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ Content-Length рд╣реЗрдбрд░ рднреА рди рднреЗрдЬреЗрдВ: рдЕрдиреБрд░реЛрдз рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред

рдЕрд╕рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЕрдкрд▓реЛрдб рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ/рдлреЙрд░реНрдо-рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд░реНрд▓ рд╕реАрдзреЗ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ: requests.put(url, data=open('img.png', 'rb'))

рддреЛ, рдореИрдВрдиреЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЫрд╡рд┐ рдмрдирд╛рдИ рдФрд░ рдХрд┐рдпрд╛

curl --request PUT --upload-file img.png https://httpbin.org/put

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд░реНрд▓ рдареАрдХ рд╡рд╣реА рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА (рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ files= рдкреИрд░рд╛рдореАрдЯрд░ multipart/form-data рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЕрдкрд░рд┐рд╖реНрдХреГрдд рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдбред рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

with open('img.png', 'rb') as data:
    requests.put(url, data=data)

рдЕрдиреБрд░реЛрдз рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред

рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ :рдбрд╛рдВрд╕рд░: :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд, рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдорд┐рд▓рддрд╛ рд╣реИ: (рдЕрдиреБрд░реЛрдз-реи.резрей.реж)

with open('default.zip', 'rb') as data:
    requests.put(url, data=data)

рдЖрдЙрдЯрдкреБрдЯ:

C:\svn\libraries\cpp>python req_put.py default.zip
MD5: 5dc0658d93e942fa7d1fa443e04bba83
SHA1: 18e7980d9d9ac544ac3e684a4d051932c3a3a336
Traceback (most recent call last):
  File "req_put.py", line 102, in <module>
    resp = requests.put(uri,  headers=headers, data=data) # data=data , params=payload)
  File "C:\Python27\lib\site-packages\requests\api.py", line 124, in put
    return request('put', url, data=data, **kwargs)
  File "C:\Python27\lib\site-packages\requests\api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Python27\lib\site-packages\requests\sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "C:\Python27\lib\site-packages\requests\adapters.py", line 473, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(10054, 'An existing connection was forcibly closed by the remote host'))

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

everping picture everping  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tiran picture tiran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

remram44 picture remram44  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eromoe picture eromoe  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

brainwane picture brainwane  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ