Ideally, you would know something about the integrand in a neighborhood of the singularity which would allow you to resolve its impact. For example, suppose you want $\int_0^1 f(x) dx$, but $f$ has a singularity at $x=0$, behaving as $x^{-1/2}+O(1)$ there, and it has no other singularities. Then you can write the integral as $\int_0^\delta x^{-1/2} dx + \int_0^\delta f(x)-x^{-1/2} dx + \int_\delta^1 f(x) dx$ where $\delta>0$ is a tuning parameter. Then the first term is exactly $2\delta^{1/2}$ and the other terms have no singularities. You can make a similar "regularizing" transformation using a change of variables as RRL suggested.
You could also use adaptive quadrature in this situation. Essentially, if the singularity is of order $-1<p<0$, then any reasonable quadrature method on that interval will be of order $p+1$, so that Richardson extrapolation can be applied, provided you know exactly what $p$ is. Note that this requires a much less detailed asymptotic than the first suggestion from the previous paragraph; like the second suggestion from that paragraph, it only requires you to know the order of the singularity. I can go into specifics about this if you like, feel free to comment.
If you are repeatedly dealing with the same "type" of singularity behavior, such as a singularity of order $-1/2$ at both endpoints, then it may be worth developing a Gaussian quadrature method (or you may be in a case where a standard one applies). This simplifies the problem of handling the singularity because it allows you to deal with much simpler integrands, but it does still require you to be able to compute some singular integrals in order to compute the nodes and weights.
If you don't know anything quantitative about the singularity, then about all you can do is adaptive quadrature. Unfortunately the usual construction of adaptive quadrature methods using Richardson extrapolation will fall through in the presence of a singularity, because the order of the method is different in the presence of the singularity, and you need to know the exact order to know how to set up your Richardson extrapolation. So you will be stuck with essentially "brute force" adaptive quadrature instead: keep locally refining repeatedly until the difference between successive refinements is less than your tolerance. This method is not mathematically safe (in particular, it may fail to detect non-integrable singularities even when they are present), but it may work in practice anyway.
If you don't even know where the singularity is...good luck.