#c# #php #post #upload #http-status-code-403
#c# #php #Публикация #загрузка #http-status-code-403
Вопрос:
Я пытаюсь загрузить файл и некоторые данные с помощью POST-запроса из моей программы на C # на свой сервер, но я всегда получаю ошибку 403.
Параметры post: «id» = папка, в которую будет сохранен файл, «pos» = имя файла
Итак, если пользователь загружает файл «abc.text», а данные POST имеют id =»Mario» pos =»first», файл будет сохранен в /users/Mario/first.txt
Я попытался изменить идентификатор параметров и pos как GET, но у меня всегда есть ошибка 403
Ответ C #
{StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1,
Content: System.Net.Http.StreamContent,
Headers:{ Vary: Accept-Encoding X-Varnish: 818481486 Age: 0
X-Cache: MISS Transfer-Encoding: chunked Connection: keep-alive
Date: Thu, 18 Apr 2019 14:29:10 GMT Content-Type: text/html;
charset=iso-8859-1}}
Мой код:
<!DOCTYPE html>
<html>
<head>
<title>Upload your files</title>
</head>
<body>
<form enctype="multipart/form-data" action="uploader2.php" method="POST">
<p>Upload your file</p>
<input type="file" name="uploaded_file"></input><br />
<input type="input" name="id"></input><br />
<input type="input" name="pos"></input><br />
<input type="submit" value="Upload"></input>
</form>
</body>
</html>
<!-- language: lang-php -->
<?PHP
if(!empty($_FILES['uploaded_file']))
{
$path = "users/".$_POST['id']."/";
if(!is_dir($path))
{
if(!mkdir ($path,0777,true))
echo 'Error creating folder!';
}
$path = $path.$_POST['pos'].".txt";
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
echo "Ok";
} else{
echo "Failed!";
}
}
?>
Это мой код на C #
using (var httpClient = new HttpClient())
{
MultipartFormDataContent multipartContent = new MultipartFormDataContent();
var fp = File.ReadAllBytes("file.txt");
multipartContent.Add(new StringContent("Mario"), "id");
multipartContent.Add(new StringContent("first"), "pos");
multipartContent.Add(new ByteArrayContent(fp, 0, fp.Length), "uploaded_file", "file.txt");
HttpResponseMessage response = await httpClient.PostAsync("http://host.com/uploader2.php", multipartContent);
response.EnsureSuccessStatusCode();
httpClient.Dispose();
string sd = response.Content.ReadAsStringAsync().Resu<
}
}
Ответ №1:
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Используйте это в своем php-скрипте:
header("Access-Control-Allow-Origin: *"); // wildcard allows access to all domains
Access-Control-Allow-Origin — это заголовок CORS (совместное использование ресурсов разных источников).
Когда сайт A пытается получить содержимое с сайта B, сайт B может отправить заголовок ответа Access-Control-Allow-Origin, чтобы сообщить браузеру, что содержимое этой страницы доступно для определенных источников. (Источник — это домен, а также схема и номер порта.) По умолчанию страницы сайта B недоступны для любого другого источника; использование заголовка Access-Control-Allow-Origin открывает дверь для перекрестного доступа по определенным запрашивающим источникам.
Комментарии:
1. Спасибо за ответ. Проблема по-прежнему сохраняется. Я обновил основной пост ответом C #, если это может помочь