Getting a result from a URL in C++ - c++

I need a bare bones C++ version of some code. Using Visual Studio 2017.
Friend of mine wants to get results from a URL link using c++. He will write the .json parsers later, he then wants the code to visit the same URL domain and grab URL's that were in the same result.
I'm thinking it's got to be some sort of HTTP / HTTPS C++ GET requests maker function but I'm not sure.
looking for a possible template for this task, along with links to any necessary libraries for this project.

libcurl (http://curl.haxx.se/libcurl/) is definitely a great HTTP/HTTPS client library which has all possible bells and whistles.
But there are others like:
LibHTTP (https://www.libhttp.org/)
CivetWeb (https://github.com/civetweb/civetweb)
cpp-httplib (https://github.com/yhirose/cpp-httplib)
libwww (http://www.w3.org/Library/)
LibHTP (https://github.com/OISF/libhtp)
HTTP Parser (https://github.com/nodejs/http-parser)
There are already a lot of JSON parsers out there. To name a few:
cJSON (https://github.com/DaveGamble/cJSON)
ultrajson (https://github.com/ultrajson/ultrajson)
JsonCpp (https://github.com/open-source-parsers/jsoncpp)
CAJUN (https://sourceforge.net/projects/cajun-jsonapi/)
JSON for Modern C++ (https://github.com/nlohmann/json/)
RapidJSON (https://github.com/Tencent/rapidjson)
tiny-json (https://github.com/rafagafe/tiny-json)
json.h (https://github.com/sheredom/json.h)
json-parser (https://github.com/udp/json-parser)
libfastjson (https://github.com/rsyslog/libfastjson)
liblaxjson (https://github.com/andrewrk/liblaxjson)
But there are more of them out there...
Up to you to make your pick based on which criteria are important to you (like: low footprint, performance, C++ API).

Related

How can I compile my ColdFusion code for sourceless distribution, and have it be unreadable?

I've been tasked with creating a deployable version of a ColdFusion web app to be installed on a clients server. I'm trying to find a way to give them a compiled version of our code, and my first inclination was to use the CFCompile utility that I found here. However, after running CFCompile, most of the code in the CFM files is still readable. The only thing that appears to be obfuscated at all is the actual ColdFusion code - all of the SQL Queries are still perfectly readable. (Example in the screenshot below)
The HTML and JavaScript are also still readable in the compiled code, but that doesn't matter as those can be seen in a web browser anyways.
Is there another way to distribute my source code in a format that is completely unreadable to the user? I'm guessing that for whatever method I choose, there will be some way of decompiling the code. That's not an issue, I just need to find a way to make it more difficult than opening the file and seeing the queries.
Hostek has a pretty good write up on the subject over on their site - How to Encrypt or Compile ColdFusion Files.
Basically, from that article:
Using cfcompile.bat
The cfcompile.bat utility will compile all .cfm and .cfc files within a given directory into Java bytecode. This has the effect of making your source code unreadable, and it also prevents ColdFusion from having to compile your ColdFusion files on first use which provides a small performance enhancement.
More details about using cfcompile.bat can be found in ColdFusion's Documentation
Using cfencode.exe
The cfencode.exe utility will apply basic encryption to a specific file or directory. If used to encrypt a directory, it will apply encryption to ALL files in the directory which can break any JS, CSS, images, or other non-ColdFusion files.
They do also include this note at the bottom:
Note: Encrypting your site files with cfencode does not guarantee absolute security of your source code, but it does add a layer of obfuscation to help prevent unauthorized individuals from viewing the source.
The article goes on to give basic instructions on how to use each.
Adobe has this note on their site regarding cfencode:
Note: You can also use the cfencode utility, located in the cf_root/bin directory, to obscure ColdFusion pages that you distribute. Although this technique cannot prevent persistent hackers from determining the contents of your pages, it does prevent inspection of the pages. The cfencode utility is not available on OS X.
I would also add that it will be trivial for anyone familiar with ColdFusion to decode anything encoded with this utility because they also provide the decoder.

Is there common practice to find required header files of libraries in C++?

I am fairly new to C++ and this might sound like a very dumb question, but is there any resource or common practice to find the headers that need to be included when using C/C++ libraries?
For example: I am currently doing a project using the OpenSSL library.
How do I find out which headers I need to include for the sample codes on this page:
https://wiki.openssl.org/index.php/EVP_Key_and_Parameter_Generation
I had this issue many times and I am almost always struggling to find the right header files to include if the documentation doesn't provide a full working example.
Am I missing smoething when it comes to finding the required header files or is this lack of documentation the norm for examples?
I am aware that you were hoping to find something like a fancy database or any secret documentation to get the header.
Like for the Qt framework in the Qt Creator would be positioning the cursor on a written class in the code and just pressing alt + enter is adding the necessary header on top of the code.
Sadly that functionality is just for Qt not for c/c++ implemented.
The correct answer to your question might be as simple and maybe basic as so and it is also the fastest way I found and probably most people use:
A search engine of your choice(Google, DuckDuckgo, Startpage.com ...)
library command (f.e. EVP_PKEY)
Programming language name (f.e. c++, Qt, ...)
Proof of concept f.e. for startpage.com:
Maybe https://en.cppreference.com/w/cpp/header is an alternative - I just never found stuff real quick there.
The second best option I found and use regularly to find in addition to the header even good sample codes/examples is a program called Recoll (For Linux, Mac and Windows - or a similar desktop search engine)
Recoll is based on the very capable Xapian search engine library, for
which it provides a powerful text extraction layer and a complete, yet
easy to use, Qt graphical interface.
(https://www.lesbonscomptes.com/recoll/)
It works like that:
I put a selection of the best 50 books to a special topic in a folder (f.e. c++, c, qt - just stay really specific) and let recoll crawl the folder.
Now use keywords like EVP_PKEY to find every topic in all of your most loved and respected pdf c++ books in nano- to milliseconds - depending on how much money you spend on your pdf library. (Sure, you have to get/buy them first)
(But its a freaking fast tool and even prioritized due to the Xapian search engine library)

how to read PAC file using C++

I am using libcurl for HTTP requests.
My application should be able to understand the proxy settings if the user has any
So it can be
Proxy by proxy server or
Proxy by Auto proxy Configuration
I see support for PAC isnt available in libcurl
Since my application is in C++, are there any extension / parser engine available?
Thanks for reading the post
PAC (Proxy Auto Config) file is simply Javascript that has function FindProxyForURL returning proxy config string.
Technically, this function can use anything that Javascript can do, so you must bundle some Javascript engine to interpret it.
tiny-js (simple single-file javascript interpreter written in C++) is the library that should fit the bill for this task.
UPDATE: pacparser library is pretty much ready-to-use engine designed specifically to parse pac files. Its downside that it bundles whole SpiderMonkey Javascript engine, which makes it rather heavy solution - it would add 1MB+ to your project binaries just to parse pac files.
If you can hack pacparser to use tiny-js instead of SpiderMonkey, that would be really nice solution.

Saving a webpage to disk using C++

I've managed to download a "file" from the internet with the help of wininet library, but I can't seem to save a "webpage" i.e. something I can edit later on with a text editor or with ifstream.
In this case, what are the tools I should resort to? Can wininet save a webpage to disk? Should I consider cURL (though I haven't managed to download regular files due to lack of documentation of cURL)? Do I need to learn what's called socket programming?
NB: I'm on Windows, using MinGW but can switch to MSVC if necessary, I'm looking for source code in the webpage, eventually I'm after the text in a webpage.
Also, I am not familiar with any of the functions in wininet, curl, or sockets. What do I need to learn of these?
Any help is greatly appreciated!
If your program is going to run both on windows and unix, then use cURL. Otherwise, stick with MSVC and WinINet functions http://msdn.microsoft.com/en-us/library/windows/desktop/aa385473(v=vs.85).aspx It's much easier to use in terms of the efforts required to get your program running and distributed (esp. if you're not linking your program against cUrl statically. Otherwise, you'll need to take libcurl.dll everywhere your program runs on Windows). With WinINet, you simply need to include a header and a library to use the functions.
If you're going to use WinINet, refer to this code snippet: http://www.programmershelp.co.uk/showcode.php?e=57
Use the same code except for the while loop. Instead of reading one byte at a time, read them by chunks and write them to the output file handle.
If you're going to use cURL, refer to this post: Download file using libcurl in C/C++

Small library for generating HTML files in C++

Is there a library that will allow easier generation of a simple website using C++ code. This 'website' will then be compiled into a CHM help file (which is the final goal here). Ideally, it will allow generation of pages easily and allow links to be generated between pages easily. I can do this all by hand, but that is going be very tedious and error prone.
I know about bigger libraries such as Wt, but am more interested in smaller ones with little or no dependencies and a need for installation.
You can try CTPP template engine. It is written in C++ is small and quite fast.
Do you need this project to be written in c++? Because if you just need to prepare documentation in CHM I would go with Sphinx. Sphinx is a set of tools written in Python that generate manuals in few formats (chm, html, LaTeX, PDF) from text files (formated using reStructuredText markup language). Those text files could be created by hand or using some application and then combined into one manual using Sphinx. In my work right now we are using this solution to write documentation, because it is very easy to maintain text files (merging, tracking changes etc.) than for example html or doc. Sphinx is used to generate Python language documentation (chm), so it is capable to handle really large project.
I've used the FLATE library every day for ten years and it works flawlessly. It's a piece of cake to use; I can't recommend it enough.
It will definitely do the trick, though probably at a much lower level than you have in mind. It is a C-language source library that you can link with a C++ caller. It's also available as a Perl module, but I haven't used that.
FLATE library
Flate is a template library used to deal with html code in CGI applications. The library includes C and Perl support. All html code is put in an external file (the template) and printed using the library functions: variables, zones (parts to be displayed or not) and tables (parts to be displayed 0 to n times). Using this method you don't need to modify/recompile your application when modifying html code, printing order doesn't matter in your CGI code, and your CGI code is much cleaner.
HTH and good luck!
Are this CHM lib and the related links what you're looking for?