Как открыть URL-адрес из C++?
как открыть URL-адрес из моей программы на C++?
В Рубине вы можете это сделать
%x(open https://google.com)
Что эквивалентно в C++? Интересно, существует ли независимое от платформы решение. Но если нет, я бы предпочел Unix/Mac лучше :)
Вот мой код.:
#include <stdio.h>
#include <string.h>
#include <fstream>
int main (int argc, char *argv[])
{
char url[1000] = "https://www.google.com";
std::fstream fs;
fs.open(url);
fs.close();
return 0;
}






Ответы - Как открыть URL-адрес из C++? / How do I open a URL from C++?



27.06.2013 08:07:20
C не так высокоуровневый, как упомянутый вами язык сценариев. Но если вы хотите держаться подальше от программирования на основе сокетов, попробуйте Curl. Curl-это отличная библиотека C и имеет множество функций. Я использую его в течение многих лет и всегда рекомендую его. Он также включает в себя некоторые автономные программы для тестирования или использования оболочки.



27.06.2013 08:13:18
Ваш вопрос может означать две разные вещи:
1.) Откройте веб-страницу с помощью браузера.
#include <windows.h>
#include <shellapi.h>
...
ShellExecute(0, 0, L"http://www.google.com", 0, 0 , SW_SHOW );
Это должно сработать, он открывает файл с соответствующей программой. Следует открыть браузер, который обычно является веб-браузером по умолчанию.
2.) Получите код веб-страницы, и вы будете рендерить его самостоятельно или делать что-то другое. Для этого я рекомендую прочитать это или/и это .
Надеюсь, это хоть немного поможет.
EDIT: не заметил, что вы просите UNIX, это работает только на Windows.






ShellExecute
-это макрос, который расширяется до ShellExecuteA
или ShellExecuteW
. Я не видел никого, кто бы использовал настройки компиляции, чтобы сделать его расширенным в
версию в настоящее время.

27.06.2013 10:33:22
Вот пример кода windows, использующего winsock.
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <string>
#include <locale>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
string website_HTML;
locale local;
void get_Website(char *url );
int main ()
{
//open website
get_Website("www.google.com" );
//format website HTML
for (size_t i=0; i<website_HTML.length(); ++i)
website_HTML[i]= tolower(website_HTML[i],local);
//display HTML
cout <<website_HTML;
cout<<"\n\n";
return 0;
}
//***************************
void get_Website(char *url )
{
WSADATA wsaData;
SOCKET Socket;
SOCKADDR_IN SockAddr;
int lineCount=0;
int rowCount=0;
struct hostent *host;
char *get_http= new char[256];
memset(get_http,' ', sizeof(get_http) );
strcpy(get_http,"GET / HTTP/1.1\r\nHost: ");
strcat(get_http,url);
strcat(get_http,"\r\nConnection: close\r\n\r\n");
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
cout << "WSAStartup failed.\n";
system("pause");
//return 1;
}
Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
host = gethostbyname(url);
SockAddr.sin_port=htons(80);
SockAddr.sin_family=AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
cout << "Connecting to "<< url<<" ...\n";
if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0)
{
cout << "Could not connect";
system("pause");
//return 1;
}
cout << "Connected.\n";
send(Socket,get_http, strlen(get_http),0 );
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket,buffer,10000,0)) > 0)
{
int i = 0;
while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r')
{
website_HTML+=buffer[i];
i += 1;
}
}
closesocket(Socket);
WSACleanup();
delete[] get_http;
}


02.06.2014 09:33:06
Мне гораздо больше повезло с использованием ShellExecuteA (). Я слышал, что есть много рисков для безопасности, когда вы используете "system()". Вот что я придумал для своего собственного кода.
void SearchWeb( string word )
{
string base_URL = "http://www.bing.com/search?q=";
string search_URL = "dummy";
search_URL = base_URL + word;
cout << "Searching for: \"" << word << "\"\n";
ShellExecuteA(NULL, "open", search_URL.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
p. s. его использование WinAPI, если я прав. Так что это не мультиплатформенное решение.


22.01.2015 02:23:59
Создайте функцию и скопируйте код с помощью winsock, который уже упоминался в Software_Developer.
например:
#ifdef _WIN32
// this is required only for windows
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
//...
}
#endif
код winsock здесь
#ifdef _WIN32
WSACleanup();
#endif

07.01.2018 08:12:38
Для windows уже есть ответы. В linux я заметил open https://www.google.com
всегда запускайте браузер из оболочки, так что вы можете попробовать:
system("open https://your.domain/uri");
вот и скажи
system(("open "s + url).c_str()); // c++

man 1 open
. Только что починил.

url
-адрес определен пользователем

execv
или проверки url перед подделкой cmd.


09.01.2020 12:01:41
Для сред linux можно использовать xdg-open
. Он установлен по умолчанию в большинстве дистрибутивов. Преимущество над принятым ответом состоит в том, что он открывает предпочтительный браузер пользователя.
$ xdg-open https://google.com
$ xdg-open steam://run/10
Конечно, вы можете обернуть это в вызов system()
.