Я программист с играми и 3D-графикой, и на данный момент я хотел бы освежить свои навыки создания сетей и веб-разработки.
У меня есть задача, которую я хотел бы сделать для этого. Моя идея заключается в том, что я хотел бы иметь возможность отправлять HTTP-запрос или что-то похожее на мой веб-сервер, который запускает настройку на основе LAMP. Я хотел бы знать, как я могу отправить HTTP-запрос, содержащий некоторую информацию с моего iPhone, используя инфраструктуру Cocoa Touch, на мой веб-сервер.
Я хотел бы, чтобы веб-сервер (используя PHP) мог записывать отправленную информацию в текстовый файл, который я могу использовать позже для создания графиков. Для моего примера мы могли бы просто отправить текущую дату.
Я думаю, что люди должны делать это очень часто, и я действительно хочу знать, как это сделать. Спасибо за вашу помощь.
PS Если вы не знаете код Cocoa, чтобы отправить запрос, все в порядке, я уверен, что смогу это понять, но я хотел бы хотя бы знать, как заставить сервер Linux сохранять HTTP-запрос, предпочтительно PHP, но другой подходящий язык в порядке. Бонусные баллы за то, чтобы сделать это безопасно .
Кроме того: я полный noob на этом и требую исходный код, приветствия: D
Вы действительно не можете пройти мимо библиотеки, такой как ASIHTTPRequest, если вам нужно сделать HTTP-запросы от iPhone или Mac-клиента на веб-сервере. Документация очень хорошая и охватывает все важные темы, такие как:
Вы должны это проверить – это сделает вашу жизнь намного проще.
Хорошо, никто не дал ответа, поэтому я ушел и обнаружил проект, в котором подробно описывается, как это сделать, используя собственное приложение Mac для клиента или клиента веб-страницы PHP. Я немного изменил код исходного кода, так что вы знаете, что я тестировал его на своем собственном сайте, и он работает для загрузки файлов на веб-сервер.
PHP Server (uploader.php)
<?php $target = "upload/"; $target = $target . basename( $_FILES['uploaded']['name'] ); $filename = "\"" . basename( $_FILES['uploaded']['name'] ) . "\""; $ok = 1; if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) { echo "$filename"; echo "was uploaded successfully"; } else { echo "$filename"; echo "upload failed"; } ?>
Веб-клиент (index.php)
<form enctype="multipart/form-data" action="uploader.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> Choose a file to upload: <input name="uploaded" type="file" /><br /> <input type="submit" value="Upload File" /> </form>
Клиент какао
Код для клиента Cocoa довольно длинный, и код, который идет с указанным выше, можно найти здесь . Здесь есть альтернатива , и я думаю, что это лучший код, но я не тестировал его с помощью PHP-сервера выше. Я ожидаю, что вы сможете изменить его с минимальными изменениями, если они есть.
Вот основной способ в Cocoa отправить текстовый запрос POST на веб-сервер:
NSString* content = [@"item=" stringByAppendingString:@"Something to Post"]; NSURL* url = [NSURL URLWithString:@"http://www.mysite.com/index.php"]; NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc] initWithURL:url]; [urlRequest setHTTPMethod:@"POST"]; [urlRequest setHTTPBody:[content dataUsingEncoding:NSASCIIStringEncoding]];
Мне это нравится, потому что это минимальное решение, и вы можете легко его построить, и, надеюсь, это может помочь кому-то другому, если они натолкнутся на это 🙂
Не совсем парень на стороне сервера, но отправка HTTP-запроса может быть выполнена несколькими способами. Самый простой способ – использовать + NSString stringWithContentsOfURL: и использовать параметры GET в URL. Это попадет на сервер по указанному вами URL-адресу, а параметры GET могут содержать данные. Возвращаемое значение может быть проигнорировано и должно быть минимальным.
Не собираюсь искать его в глубине прямо сейчас, но я считаю, что вы должны использовать NSStream и NSURLRequest для построения более сложных запросов, используя, например, POST.