0

I'm currently achieving a python project in which I need to have a text file uploaded through HTTP to my server.

At first I was using for convenience an HTTP form and the upload has been working fine. But now, I want it so I don't have to manually select the file and just have my Python script sending the file for me.

But even if the Apache2 logs indicate that a POST Request have been received by the server while using the Python script, the file is not uploaded.

PHP

<?php
$uploaddir = './uploads/';
$uploadfile = $uploaddir . basename($_FILES['filer']['name']);

print_r($_FILES);
echo "<br/>";
echo $uploaddir;
echo "<br/>";
echo $uploadfile;

if (move_uploaded_file($_FILES['filer']['tmp_name'], $uploadfile)) {
    echo "<br/>UPLOAD SUCCESS\n";
} else {
    echo "<br/>ERROR :\n";
}
?> 

WORKING HTML FORM

<form action='processing.php' method="post" enctype="multipart/form-data">
      <p></p>
      <input type="file" name="filer" accept=".txt" id="file_loader">
      <p></p>
      <a href="https://www.commpro.biz/how-and-where-to-pay-using-bitcoin-in-3-easy-steps/" target="_blank">How to pay in bitcoin</a>
      <p></p>
      <input type="submit" name="send_file" value="Send File ">
    </form>

PYTHON

This script has been tested with httpbin.org/post and I have received only code 200.

import requests

with open("987654321.txt", "rb") as a_file:

    file_dict = {"987654321.txt": a_file}
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0','Origin':"http://www.myurl.com"}
    response = requests.post("http://www.myurl.com/processing.php", files=file_dict,headers=headers)
    print(response.text)
    print(response)

APACHE2 LOGS

Here are the server logs. The first line is a successful upload by the HTML form, the second is an unsuccessful attempt from the python script.

127.0.0.1 - - [04/Jul/2021:09:39:46 +0000] "POST /processing.php HTTP/1.1" 302 562 "http://www.myurl.com/" "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"
127.0.0.1 - - [04/Jul/2021:09:40:55 +0000] "POST /processing.php HTTP/1.1" 302 523 "-" "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"

Can someone indicates me if I need to change something about the script or the php side to have my file uploaded ?

1
  • If you have a redirect response (302 FOUND status), pythons request object may hide the first response and only show the response from the followed redirect which is counter-intuitive for your analysis. Set allow_redirects to false, it defaults to true. This should give you more insights. Commented Jul 4, 2021 at 10:31

1 Answer 1

1

You named your file 987654321.txt, not filer as expected:

import requests

with open("987654321.txt", "rb") as a_file:    
    file_dict = {"filer": a_file}
    response = requests.post("http://www.myurl.com/processing.php", files=file_dict)
    print(response.text)
    print(response)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.