Как перенаправить HTTPS в HTTP?

fgets(text, 80, infile);

fgets() - это функция библиотеки C, которая ожидает char * в качестве своего первого параметра. Он абсолютно ничего не знает ни о каком классе C ++, и не только о std::string, который вы передаете в качестве первого параметра. Также fgets() не имеет никакого представления о классе C ++ std::ifstream, который вы пытаетесь передать ему в качестве третьего параметра. И это именно то, что говорится в сообщении об ошибке вашего компилятора.

Вы случайно смешиваете код на C и C ++, что приводит к повторяющейся путанице.

char inputfilename[80], outputfilename[80];

Здесь вы также должны использовать std::string вместо массивов в стиле C произвольного размера.

while (infile.eof()==0) {

Это всегда ошибка , и прочтите эту связанную статью для получения дополнительной информации.

fprintf(outfile,"%d.  %s\n", text);

Опять же: fprintf также является библиотечной функцией C, которая абсолютно ничего не знает о классах C ++, таких как std::string и std::ofstream. В любом случае это ошибка, потому что эта строка имеет заполнители для двух параметров: целое число, %d и строка в стиле C, %s; и вы даете здесь только один параметр, text. Если бы вы писали C вместо кода C ++, это тоже не сработало бы, но это в основном академично. Это программа на C ++, и эта функция библиотеки C не имеет никакого отношения к делу, во-первых, здесь.

Когда вы читаете из std::ifstream:

  • Вы можете использовать std::getline, чтобы прочитать всю строку текста в std::string

  • [ 1130]

    В качестве альтернативы вы можете использовать отформатированный оператор извлечения >>

  • Или вы можете использовать различные методы объекта std::ifstream для чтения из файла и в подходящий буфер

Эти альтернативы не эквивалентны (иначе какой смысл?), И они делают разные вещи, и правильность выбора зависит от требований.

Аналогично, для записи в std::ofstream вы можете использовать:

  • Оператор форматированного вывода <<.

  • Различные методы самого объекта std::ofstream.

И в некоторых сложных ситуациях вы можете воспользоваться библиотекой итераторов, а также реализовать чтение и запись, используя итераторы ввода и вывода.

Правильный подход зависит от конкретной ситуации. Для получения дополнительной информации о том, как читать и писать из файлов в C ++ с использованием этих подходов, см. Любую хорошую книгу по C ++ . Какую бы книгу C ++ на самом деле ни советовали вам использовать fgets() для чтения из std::ifstream и в std::string: выбросьте ее и получите лучшую книгу из списка, указанного выше. Если это именно то, что вы нашли в какой-то программе в Интернете - вы не можете выучить C ++ таким образом, собрав воедино разные части разных программ, и надеясь, что результаты сработают. Чтобы исправить все ваши ошибки компиляции: удалите весь тот код C, который абсолютно ничего не знает о C ++, и замените его на надлежащий код C ++, используя любой из вариантов, которые я обрисовал в общих чертах выше, используя примеры из книг C ++, связанных выше, в качестве ссылки .

162
задан shiser 3 September 2012 в 06:53
поделиться

2 ответа

Это не было протестировано, но я думаю, что это должно работать с помощью mod_rewrite

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
125
ответ дан Gili 23 November 2019 в 21:22
поделиться

Следует иметь в виду, что механизм Перезаписи только умирает, как только Запрос HTTP был получен - что означает, что Вам все еще был бы нужен сертификат для клиента для установки соединения для отправления запроса!

Однако, если резервная машина, будет казаться, будет иметь то же имя узла (насколько клиент заинтересован), тогда не должно быть никакой причины, Вы не можете использовать тот же сертификат в качестве основной производственной машины.

71
ответ дан Kieron 23 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: